It’s perfect for almost every CRUD web application which can be created astonishingly fast. More complicated apps are welcome and, thanks to the huge ecosystem of Python, the number of potential applications is limitless.
Let’s discuss the main advantages of Python. It’s a robust programming language, readable by design (for example proper indentation is a part of the language), and it enforces best practices. It’s also relatively easy to learn, thanks to simple design, especially in comparison to more the enterprise-oriented and complicated Java or C#.
Django is the most popular framework in Python for building web applications. It uses the Model View Template (MVT) pattern, which is a slightly modified version of the Model View Controller (MVC) pattern, in which the View works more like the Controller, and the Template acts as the View. Such a solution offers a flexible way of separating context and business logic - each layer has its own responsibilities.
Pros of Django
Batteries included - Ready for your MVP
Django helps developers by speeding up the development process. It includes its own Object Relation Mapping (ORM) layer for handling database access, sessions, routing, and multi-language support. It also takes care of security while handling requests. It includes an admin panel (called django-admin) for managing models data by default.
Everything is explicit, following the mentioned Zen of Python, where explicit is always better than implicit. In the case of Django it means: you have to configure it first. It’s the opposite of convention over configuration. It’s the perfect framework for developers used to Python. Django inherits all Python’s benefits, like great support for external libraries and programmer productivity boost. It significantly speeds up development.
Cons of Django
Badly-designed architecture combined with Python, which is not the fastest language around, may lead to slow websites. So make sure that your app is properly optimized. Django offers its own benchmarks to check the speed of internals and spot all bottlenecks. Caching and a bunch of different optimizations can be applied. Check out a complete guide.
Ensuring a well-optimized and scalable architecture from the beginning should save you a lot of problems with speed in the future. Django powers huge web applications - experiencing speed issues is not a problem of Django itself, but rather a question of proper configuration and architecture design.
Lack of convention
In comparison to frameworks like Ruby on Rails (which is a perfect example of the Convention Over Configuration approach), everything has to be explicitly defined, which leads to configuration boilerplate that may slow down the development process. On the other hand, relying on configuration is a common practice for the Python ecosystem.
Not always the right choice
Always pick the best tool for the job. Django may not be the right choice for really small sites, like static one-pagers or microservices - it this case you may want to use Flask.
Django was designed to deliver standard web applications really fast. This means that it combines all the pieces needed to compose simple a CRUD app, but also more complicated web applications. For a really simple services it might be too complicated with all the “batteries” included.
We also prepared a Django vs Rails comparison here - check this out.