This example shows how middleware order affects the sequence of prints during request and response.
from django.utils.deprecation import MiddlewareMixin
class FirstMiddleware(MiddlewareMixin):
def process_request(self, request):
print('FirstMiddleware: before view')
def process_response(self, request, response):
print('FirstMiddleware: after view')
return response
class SecondMiddleware(MiddlewareMixin):
def process_request(self, request):
print('SecondMiddleware: before view')
def process_response(self, request, response):
print('SecondMiddleware: after view')
return response
# settings.py snippet
MIDDLEWARE = [
'myapp.middleware.FirstMiddleware',
'myapp.middleware.SecondMiddleware',
]
# When a request comes in, output will be:
# FirstMiddleware: before view
# SecondMiddleware: before view
# (view runs here)
# SecondMiddleware: after view
# FirstMiddleware: after view