Dans Django, une requête est traitée par le handler WSGI/ASGI, enveloppée par une pile de middleware, routée par l'URL resolver vers une view, et transformée en HttpResponse qui ressort par les mêmes middleware en sens inverse.
Dans Django, une requête est traitée par le handler WSGI/ASGI, enveloppée par une pile de middleware, routée par l'URL resolver vers une view, et transformée en HttpResponse qui ressort par les mêmes middleware en sens inverse.
Web server ──▶ WSGI/ASGI handler (crée HttpRequest)
▼
Middleware — phase request (haut → bas : __call__ avant get_response)
▼
URL resolver (urls.py) ── associe path → view + kwargs
▼
Middleware — hook process_view
▼
View (function / class-based) ── votre logique, retourne HttpResponse
▼
Middleware — phase response (bas → haut : après get_response)
▼
HttpResponse ──▶ client
HttpRequest à partir de l'environ/scope.get_response() s'exécute de haut en bas (SecurityMiddleware, SessionMiddleware, AuthenticationMiddleware, CSRF, …). N'importe lequel peut court-circuiter et retourner une response de manière anticipée.ROOT_URLCONF sont associés au path pour sélectionner une view et capturer les kwargs.process_view — un hook de middleware qui s'exécute juste avant l'appel de la view.HttpResponse. Les exceptions déclenchent process_exception.get_response() s'exécute de bas en haut, permettant au middleware de modifier la response sortante (headers, compression).HttpResponse est renvoyé en streaming vers le server puis le client.# middleware.py
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request): # 2. phase request (avant)
request.started = time.monotonic()
response = self.get_response(request) # appelle la couche suivante / view
response["X-Time"] = "..." # 6. phase response (après)
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)})
Le cycle request/response de Django est centré sur le middleware, donc la plupart des comportements transversaux — auth, sessions, CSRF, security headers, caching — sont implémentés sous forme de middleware ordonnés. Comprendre que le code de la phase request s'exécute de haut en bas et que le code de la phase response s'exécute de bas en haut (et que l'ordre dans MIDDLEWARE compte) est essentiel pour placer correctement votre propre middleware, déboguer pourquoi un 403/redirect survient avant votre view, et savoir où greffer la logique sans toucher à chaque view.
Une bibliothèque de questions d'entretien IT avec des réponses détaillées — du Junior au Senior.
Faire un don