Introduction
Middleware is a framework of hooks into Django's request/response processing.
Built-in Middleware
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
Custom Middleware
class RequestLoggerMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# Before view
print(f"Request: {request.path}")
response = self.get_response(request)
# After view
print(f"Response: {response.status_code}")
return response
Method Hooks
class ProcessMiddleware:
def process_request(self, request):
# Before routing
pass
def process_view(self, request, view_func, view_args, view_kwargs):
# Before view call
pass
def process_response(self, request, response):
# After view
return response
def process_exception(self, request, exception):
# On exception
return None # Or HttpResponse
Practice Problems
- Log all requests
- Track user sessions
- Add CORS headers
- Rate limiting middleware
- Authentication middleware