Middleware là callable bọc quanh pipeline request → view → response, chạy trước/sau view cho mọi request.
Hợp với các cross-cutting concern: auth, session, CSRF, logging, GZip, security header, gắn tenant context vào request.
class RequestIdMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
request.id = uuid.uuid4().hex
response = self.get_response(request)
response['X-Request-ID'] = request.id
return responseRegister vào MIDDLEWARE setting; thứ tự khai báo rất quan trọng — xem [[#9224]].
- Đừng nhồi business logic vào middleware vì nó chạy cho mọi request kể cả static/admin, rất dễ thành bottleneck.
- Việc nào chỉ liên quan một view thì đặt ở view hoặc decorator.
Middleware is a callable that wraps the request → view → response pipeline, running before/after the view for every request.
It fits cross-cutting concerns: auth, session, CSRF, logging, GZip, security headers, tenant context.
class RequestIdMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
request.id = uuid.uuid4().hex
response = self.get_response(request)
response['X-Request-ID'] = request.id
return responseRegister it in the MIDDLEWARE setting (order matters — see [[#9224]]).
Pitfall: Do not stuff business logic into middleware. It runs on every request, including static/admin — easy to become a bottleneck. Anything view-specific belongs in the view or a decorator.