Trong Django, một request được xử lý bởi WSGI/ASGI handler, bao bọc bởi một chồng middleware, được URL resolver định tuyến tới một view, và biến thành một HttpResponse chảy ngược ra qua chính chồng middleware đó theo thứ tự đảo ngược.
Trong Django, một request được xử lý bởi WSGI/ASGI handler, bao bọc bởi một chồng middleware, được URL resolver định tuyến tới một view, và biến thành một HttpResponse chảy ngược ra qua chính chồng middleware đó theo thứ tự đảo ngược.
Web server ──▶ WSGI/ASGI handler (tạo HttpRequest)
▼
Middleware — pha request (trên → dưới: __call__ trước get_response)
▼
URL resolver (urls.py) ── khớp path → view + kwargs
▼
Middleware — hook process_view
▼
View (function / class-based) ── logic của bạn, trả HttpResponse
▼
Middleware — pha response (dưới → trên: sau get_response)
▼
HttpResponse ──▶ client
HttpRequest từ environ/scope.get_response() của mỗi middleware chạy từ trên xuống (SecurityMiddleware, SessionMiddleware, AuthenticationMiddleware, CSRF, …). Bất kỳ cái nào cũng có thể chặn sớm và trả về response ngay.ROOT_URLCONF được khớp với path để chọn view và bắt các kwargs.process_view — một hook middleware chạy ngay trước khi gọi view.HttpResponse. Ngoại lệ kích hoạt process_exception.get_response() chạy từ dưới lên, cho middleware sửa response đi ra (headers, nén).HttpResponse được stream về server và client.# middleware.py
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request): # 2. pha request (trước)
request.started = time.monotonic()
response = self.get_response(request) # gọi lớp kế / view
response["X-Time"] = "..." # 6. pha response (sau)
return response
# urls.py → 3. routing
urlpatterns = [path("items/<int:pk>/", views.item_detail)]
# views.py → 5. view
def item_detail(request, pk):
return render(request, "item.html", {"item": Item.objects.get(pk=pk)})
Chu trình request/response của Django lấy middleware làm trung tâm, nên phần lớn hành vi xuyên suốt — auth, session, CSRF, security headers, caching — đều được cài đặt dưới dạng middleware có thứ tự. Hiểu rằng code pha request chạy từ trên xuống và code pha response chạy từ dưới lên (và thứ tự trong MIDDLEWARE là quan trọng) là điều cốt yếu để đặt middleware của bạn đúng chỗ, gỡ lỗi vì sao một 403/redirect xảy ra trước cả view, và biết nơi móc logic mà không phải đụng tới từng view.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ