В Django запрос обрабатывается WSGI/ASGI handler, оборачивается стеком middleware, направляется URL resolver к view и превращается в HttpResponse, который течёт обратно наружу через тот же middleware в обратном порядке.
В Django запрос обрабатывается WSGI/ASGI handler, оборачивается стеком middleware, направляется URL resolver к view и превращается в HttpResponse, который течёт обратно наружу через тот же middleware в обратном порядке.
Web server ──▶ WSGI/ASGI handler (создаёт HttpRequest)
▼
Middleware — фаза request (сверху → вниз: __call__ до get_response)
▼
URL resolver (urls.py) ── сопоставить path → view + kwargs
▼
Middleware — hook process_view
▼
View (function / class-based) ── ваша логика, возвращает HttpResponse
▼
Middleware — фаза response (снизу → вверх: после get_response)
▼
HttpResponse ──▶ client
HttpRequest из environ/scope.get_response() выполняется сверху вниз (SecurityMiddleware, SessionMiddleware, AuthenticationMiddleware, CSRF, …). Любой из них может прервать цепочку и вернуть ответ раньше.ROOT_URLCONF сопоставляются с path, чтобы выбрать view и захватить kwargs.process_view — хук middleware, который выполняется прямо перед вызовом view.HttpResponse. Исключения запускают process_exception.get_response() выполняется снизу вверх, позволяя middleware изменять исходящий ответ (заголовки, сжатие).HttpResponse передаётся потоком обратно на сервер и клиенту.# middleware.py
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request): # 2. фаза request (до)
request.started = time.monotonic()
response = self.get_response(request) # вызывает следующий слой / view
response["X-Time"] = "..." # 6. фаза response (после)
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)})
Цикл запрос/ответ в Django ориентирован на middleware, поэтому большая часть сквозного поведения — auth, сессии, CSRF, заголовки безопасности, кэширование — реализована как упорядоченный middleware. Понимание того, что код фазы request выполняется сверху вниз, а код фазы response — снизу вверх (и что порядок в MIDDLEWARE имеет значение), необходимо, чтобы правильно размещать собственный middleware, отлаживать, почему 403/редирект происходит раньше вашего view, и знать, где подключить логику, не трогая каждый view.
Библиотека вопросов для IT-собеседований с подробными ответами — от Junior до Senior.
Поддержать