Creating a custom middleware
You already know the MIDDLEWARE
setting, which contains the middleware for your project. You can think of it as a low-level plugin system, allowing you to implement hooks that get executed in the request/response process. Each middleware is responsible for some specific action that will be executed for all HTTP requests or responses.
Avoid adding expensive processing to middleware, since they are executed in every single request.
When an HTTP request is received, middleware is executed in order of appearance in the MIDDLEWARE
setting. When an HTTP response has been generated by Django, the response passes through all middleware back in reverse order.
A middleware can be written as a function, as follows:
def my_middleware(get_response):
def middleware(request):
# Code executed for each request before
# the view (and later middleware) are called.
response = get_response(request)
# Code executed for each...