Django middleware is a framework of hooks into request/response processing.
1# settings.py2MIDDLEWARE = [3 "django.middleware.security.SecurityMiddleware",4 "django.contrib.sessions.middleware.SessionMiddleware",5 "django.middleware.common.CommonMiddleware",6 "django.middleware.csrf.CsrfViewMiddleware",7 "myapp.middleware.TimingMiddleware",8]910# myapp/middleware.py11import time1213class TimingMiddleware:14 def __init__(self, get_response):15 self.get_response = get_response1617 def __call__(self, request):18 # Before view19 start_time = time.time()2021 response = self.get_response(request)2223 # After view24 duration = time.time() - start_time25 response["X-Process-Time"] = str(duration)26 return response2728 def process_exception(self, request, exception):29 # Handle exceptions30 pass3132 def process_template_response(self, request, response):33 # Modify template responses34 return response
Execution order:
Built-in middleware:
SecurityMiddleware — HTTPS, HSTS.SessionMiddleware — session handling.CsrfViewMiddleware — CSRF protection.AuthenticationMiddleware — user sessions.