Web Frameworks

A web framework is a code library that makes web development faster and easier by providing common patterns for building reliable, scalable and maintainable web applications. After the early 2000s, professional web development projects always use an existing web framework except in very unusual situations.

Django, Bottle, Flask, Pyramid, Falcon and Sanic logos, copyright their respective owners.

Why are web frameworks useful?

Web frameworks encapsulate what developers have learned over the past twenty years while programming sites and applications for the web. Frameworks make it easier to reuse code for common HTTP operations and to structure projects so other developers with knowledge of the framework can quickly build and maintain the application.

Web frameworks are a concept implemented by Django, Flask, Bottle, Pyramid, Morepath, TurboGears and several other libraries. Learn how the parts fit together in the web development chapter or view all topics.

Common web framework functionality

Frameworks provide functionality in their code or through extensions to perform common operations required to run web applications. These common operations include:

  1. URL routing
  2. Input form handling and validation
  3. HTML, XML, JSON, and other output formats with a templating engine
  4. Database connection configuration and persistent data manipulation through an object-relational mapper (ORM)
  5. Web security against Cross-site request forgery (CSRF), SQL Injection, Cross-site Scripting (XSS) and other common malicious attacks
  6. Session storage and retrieval

Not all web frameworks include code for all of the above functionality. Frameworks fall on the spectrum from executing a single use case to providing every known web framework feature to every developer. Some frameworks take the "batteries-included" approach where everything possible comes bundled with the framework while others have a minimal core package that is amenable to extensions provided by other packages.

For example, the Django web application framework includes the Django ORM layer that allows a developer to write relational database read, write, query, and delete operations in Python code rather than SQL. However, Django's ORM cannot work without significant modification on non-relational (NoSQL) databases such as MongoDB or Cassandra.

Some other web frameworks such as Flask and Pyramid are easier to use with non-relational databases by incorporating external Python libraries. There is a spectrum between minimal functionality with easy extensibility on one end and including everything in the framework with tight integration on the other end.

Do I have to use a web framework?

Whether or not you use a web framework in your project depends on your experience with web development and what you're trying to accomplish. If you are a beginner programmer and just want to work on a web application as a learning project then a framework can help you understand the concepts listed above, such as URL routing, data manipulation and authentication that are common to the majority of web applications.

On the other hand if you're an experienced programmer with significant web development experience you may feel like the existing frameworks do not match your project's requirements. In that case, you can mix and match open source libraries such as Werkzeug for WSGI plumbing with your own code to create your own framework. There's still plenty of room in the Python ecosystem for new frameworks to satisfy the needs of web developers that are unmet by Django, Flask, Pyramid, Bottle and many others.

In short, whether or not you need to use a web framework to build a web application depends on your experience and what you're trying to accomplish. Using a web framework to build a web application certainly isn't required, but it'll make most developers' lives easier in many cases.

Comparing web frameworks

Talk Python to Me had a podcast episode with a detailed comparison of the Django, Flask, Tornado and Pyramid frameworks.

Are you curious about how the code in a Django project is structured compared with Flask? Check out this Django web application tutorial and then view the same application built with Flask.

There is also a repository called compare-python-web-frameworks where the same web application is being coded with varying Python web frameworks, templating engines and object-relational mappers.

Web framework resources

Web frameworks learning checklist

  1. Choose a major Python web framework (Django or Flask are recommended) and stick with it. When you're just starting it's best to learn one framework first instead of bouncing around trying to understand every framework.

  2. Work through a detailed tutorial found within the resources links on the framework's page.

  3. Study open source examples built with your framework of choice so you can take parts of those projects and reuse the code in your application.

  4. Build the first simple iteration of your web application then go to the deployment section to make it accessible on the web.

Which web framework do you want to learn about?

What is the Django web framework?

I want to learn about the Flask web framework.

What other Python web frameworks exist?

Matt Makai 2012-2022