Skip to main content


Short introduction to WSGI interface implemented by well-known libraries like Flask and Django.

WSGI stands for "Web Server Gateway Interface." It is a standardized interface or protocol that defines how web servers and web applications written in Python should communicate with each other.

WSGI acts as a bridge between web servers and Python web frameworks or applications, allowing for interoperability and compatibility between different components of a web application stack.

Key points about WSGI include


WSGI was created to standardize the way web servers interact with Python web applications. Prior to WSGI, various web frameworks had their own server interfaces, which made it challenging to deploy Python web applications on different web servers.

Separation of Concerns

WSGI promotes a clear separation of concerns in web application development. It defines a simple and consistent API that separates the responsibilities of the web server (handling incoming HTTP requests) and the web application or framework (processing requests and generating responses).


Web servers that support WSGI can host a wide range of Python web applications and frameworks, making it easier to switch between different frameworks or deploy multiple applications on the same server.


WSGI allows developers to implement middleware components, which are reusable pieces of code that can intercept and process requests and responses as they pass through the application stack. Middleware can perform tasks like authentication, logging, or response manipulation.

WSGI Application:

In WSGI, a web application is referred to as a "WSGI application." A WSGI application is a callable Python object (usually a function or a class with a __call__ method) that takes two arguments: an environment dictionary containing information about the request, and a callable object (usually called start_response) for sending HTTP headers.

Here's a simplified example of a minimal WSGI application:

def simple_app(environ, start_response):
status = '200 OK'
headers = [('Content-type', 'text/plain')]
start_response(status, headers)
return [b'Hello, WSGI World!']

In this example, simple_app is a basic WSGI application that returns a simple "Hello, WSGI World!" message.

To run a WSGI application, you typically need a web server that supports WSGI. Common choices include Gunicorn, uWSGI, and mod_wsgi for Apache. These web servers act as the interface between incoming HTTP requests and the WSGI application, invoking the application when a request is received and passing the request and response objects to it.

✅ In Summary

Overall, WSGI has played a crucial role in the Python web development ecosystem by providing a standard interface for building and deploying web applications, fostering compatibility between web servers and Python frameworks, and promoting clean and modular web application design.

✅ Resources