Diving Deep Into Python Frameworks
Introduction
Python is one of the most widely used programming languages these days, the reason being, it has an extensive set of libraries, thus allowing development and testing automation. Due to its multiple offerings, Python is on an upward tangent. One core offering of this language is that it comes equipped with full of web development frameworks, thereby allowing developers to choose them based on their requirements. However, with a greater number of choices, confusion arises. The purpose of this document is to resolve that conflict by comparing the three most popular Python frameworks, namely Django, Flask, and FastAPI. We will be comparing all three frameworks on multiple parameters, thereby allowing you to make your choice.
Why Python?
In today’s world, while there are a wide variety of programming languages to choose from, the reasons for Python having emerged as one of the top contenders are many. Versatility is deeply embedded into the roots of this programming language, that is using Python, one can create applications ranging from Raspberry Pie, Web Servers, and Desktop Applications.
The usage of Python has also skyrocketed in the domains of Data Science and Engineering. It is the second most popular language after R, which is used in Artificial Intelligence and Machine Learning. Also, when compared to other languages, the learning curve associated with Python is very easy. One of the most important parameters that can act as a deciding factor while choosing any programming language is the community support available, with Python, there is great community support provided.
Framework Offerings
In computer programming, a software framework is an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software.
While there are plenty of Python frameworks available, the scope of this document will be limited to Django, Flask, and FastAPI. These three are the primary frameworks that are used to create web apps with Python. We will be discussing each of these in subsequent sections.
Django
Django is a type of Python web development framework that allows the creation of highly secure and maintainable websites. Django came into existence in 2003 when a bunch of developers who were working on multiple websites realized that most of the code that they had written was reusable. Thus, they thought of creating a web development framework to provide most of the boilerplate code, and Django was born. The main goal of Django is to simplify the creation of a database-driven website. Many companies including Instagram, PBS, Bitbucket, Mozilla, etc., use Django as a part of their tech stack. The features that make Django stand out from the rest are:
Versatility: the versatility of Django lies in the fact that the framework can be used to create websites ranging from news websites to social networking platforms.
Security: Django provides unique security features such as offering secure methods to protect passwords rather than storing them directly.
Scalability: the underlying architecture behind Django is component-based share-nothing architecture. It allows scaling of individual component levels based on the requirement.
Maintainability: Django encourages developers to create more maintainable code by following the DRY (Do not Repeat Yourself) principle, thereby ensuring less duplication and more maintainability.
Portability: Django provides the capability to run on multiple platforms. Therefore, developers can focus on creating their applications without worrying about the underlying infrastructure.
Flask
Flask is a micro-framework based on Python. The reason it is a micro-framework is that it is not dependent on particular tools and libraries. An advantage of choosing Flask over Django is that the boilerplate code associated with the former is much less when compared to the latter (more on this in the comparison section). By default, Flask does not come bundled with a database abstraction layer, form validation, etc. It is up to the developer to use particular toolsets based on the requirements. Flask supports multiple extensions that can be embedded inside the applications – making it look as if the extensions were provided by Flask itself. Fun fact, Flask was created as an April Fool’s Day prank by Armin Ronacher.
Flask has support for URL routing that makes it easier to map URLs to code. Also in Flask, template rendering is performed using Jinja2, one of the most powerful Python template engines.
FastAPI
FastAPI is a modern, fast, high-performing web framework for building APIs with Python 3.6+. The reason it works with Python 3.6 or later is that it gets the Async feature. It was created by Sebastián Ramírez after he was not impressed with existing frameworks such as Flask. One of the aspects of FastAPI is that its performance is on par with NodeJs & Go. FastAPI supports both synchronous and asynchronous requests and also has built-in support for data validation, serialization, authentication, and authorization. It is built on top of starlette, thereby allowing the creation of asynchronous APIs that allow for performance comparisons with NodeJs & Go. The core features of FastAPI comprise:
Speed: FastAPI is indeed fast when it is compared to frameworks such as Django and Flask. Benchmarking website techempower shows us a performance comparison between different Python web frameworks.
Async code: One of the promising features of FastAPI is that it supports asynchronous code using async/await keywords.
Fast to Code: The amount of code that needs to be written with FastAPI is lesser when compared to Django and Flask.
Comparisons
It is now time to compare and decide on the framework you should choose for your next project idea. The comparison will be based on multiple parameters:
Time to Serve
After creating a rest endpoint, the time it takes to serve the incoming request can be considered an important deciding factor. For a simple application returning ‘Hello World,’ the time taken by the three frameworks was totally different.
The time taken by the first request in FastAPI was somewhere around 70ms, whereas the time was reduced to approximately 90-95% in subsequent requests taking only 4-7ms.
The time taken by the first request in Flask was somewhere around 25ms and it remained approximately the same for subsequent requests as well. Hence, no performance gain was seen.
Lastly, when the same application was executed using Django, it took the highest time of all three frameworks, around 35ms. The time remained approximately the same for subsequent requests as well.
Hence, out of the three frameworks, FastAPI is the fastest in terms of handling requests.
Community Support
Community support plays a vital role when deciding on a framework. Django, being the oldest and most widely used, has the biggest community, followed by Flask. FastAPI, on the other hand, has a comparatively smaller community because the framework is relatively new.
Documentation
FastAPI comes with rich documentation. It also generates interactive API documentation from the running application. Writing API docs can be tedious, considering there is no given standard for writing API docs. Hence, documentation written by one developer may not be understood by another. Therefore, FastAPI wins here as it comes with automatic API documentation generation. With Django and Flask, developers have to write the documentation manually.
Asynchronous Code
FastAPI provides support for asynchronous codes – Async just needs to be added to the method definition. With Flask and Django, one needs the support of third-party libraries to create asynchronous methods. Asynchronous code support is an imperative these days.
Learning Curve & Code Reusability
Django comes with the highest number of inbuilt libraries. Hence, code reusability is maximum with Django. However, the learning curve with Django is slightly tough. Flask and FastAPI are minimalistic frameworks, translating to the fact that the learning curve with these frameworks is easy.
Conclusion
This article should give you a slight perspective on the type of framework to choose. All three frameworks come with their own set of pros and cons. Django works best when the use case is related to full-stack web development. Flask is ideal for scenarios in the AI & Data Science domains. FastAPI is optimum when speed is the primary concern. Overall, all the frameworks are great and come equipped with a huge set of offerings. Opting for a specific framework depends entirely on the requirements.
Latest Blogs
Tired of spending countless hours troubleshooting failed API tests and keeping up with constant…
The business world is moving quickly and the only way to make informed decisions is to leverage…