I Django håndteres en request af WSGI/ASGI-handleren, pakkes ind af en stak af middleware, routes af URL-resolveren til et view og omdannes til en HttpResponse, der flyder tilbage ud gennem det samme middleware i omvendt rækkefølge.
I Django håndteres en request af WSGI/ASGI-handleren, pakkes ind af en stak af middleware, routes af URL-resolveren til et view og omdannes til en HttpResponse, der flyder tilbage ud gennem det samme middleware i omvendt rækkefølge.
Web server ──▶ WSGI/ASGI handler (opretter HttpRequest)
▼
Middleware — request-fase (top → bund: __call__ før get_response)
▼
URL resolver (urls.py) ── match path → view + kwargs
▼
Middleware — process_view-hook
▼
View (function / class-based) ── din logik, returnerer HttpResponse
▼
Middleware — response-fase (bund → top: efter get_response)
▼
HttpResponse ──▶ client
HttpRequest ud fra environ/scope.get_response() kører top-til-bund (SecurityMiddleware, SessionMiddleware, AuthenticationMiddleware, CSRF, …). Enhver af dem kan kortslutte og returnere et svar tidligt.ROOT_URLCONF-mønstre matches mod stien for at vælge et view og fange kwargs.process_view — et middleware-hook, der kører lige før viewet kaldes.HttpResponse. Undtagelser udløser process_exception.get_response() kører bund-til-top og lader middleware ændre det udgående svar (headers, komprimering).HttpResponse streames tilbage til serveren og klienten.# middleware.py
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request): # 2. request-fase (før)
request.started = time.monotonic()
response = self.get_response(request) # kalder næste lag / view
response["X-Time"] = "..." # 6. response-fase (efter)
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)})
Djangos request/response-cyklus er middleware-centreret, så det meste tværgående adfærd — auth, sessioner, CSRF, security-headers, caching — implementeres som ordnet middleware. At forstå, at request-fasens kode kører top-ned og response-fasens kode kører bund-op (og at rækkefølgen i MIDDLEWARE betyder noget), er essentielt for at placere dit eget middleware korrekt, fejlfinde hvorfor en 403/redirect sker før dit view, og vide hvor du kan hægte logik på uden at røre hvert eneste view.
Et bibliotek af IT-interviewspørgsmål med detaljerede svar — fra Junior til Senior.
Donér