Django'da bir request WSGI/ASGI handler tarafından işlenir, bir middleware yığınıyla sarılır, URL resolver tarafından bir view'e yönlendirilir ve aynı middleware'den ters sırada geri akan bir HttpResponse'a dönüştürülür.
Web server ──▶ WSGI/ASGI handler (HttpRequest oluşturur)
▼
Middleware — request fazı (üst → alt: get_response'dan önce __call__)
▼
URL resolver (urls.py) ── path eşleştir → view + kwargs
▼
Middleware — process_view hook'u
▼
View (function / class-based) ── mantığınız, HttpResponse döndürür
▼
Middleware — response fazı (alt → üst: get_response'dan sonra)
▼
HttpResponse ──▶ client
HttpRequest oluşturur.get_response()'tan önceki kodu yukarıdan aşağıya çalışır (SecurityMiddleware, SessionMiddleware, AuthenticationMiddleware, CSRF, …). Herhangi biri kısa devre yapıp erkenden bir response döndürebilir.ROOT_URLCONF desenleri path ile eşleştirilir.process_view — view çağrılmadan hemen önce çalışan bir middleware hook'u.HttpResponse döndürür. İstisnalar process_exception'ı tetikler.get_response()'tan sonraki kod aşağıdan yukarıya çalışır ve middleware'in giden response'u (headers, compression) değiştirmesine izin verir.HttpResponse sunucuya ve client'a geri stream edilir.# middleware.py
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request): # 2. request fazı (önce)
request.started = time.monotonic()
response = self.get_response(request) # sonraki katmanı / view'i çağırır
response["X-Time"] = "..." # 6. response fazı (sonra)
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'nun request/response döngüsü middleware merkezlidir, bu yüzden çoğu kesişen davranış — auth, sessions, CSRF, security headers, caching — sıralı middleware olarak uygulanır. request fazı kodunun yukarıdan aşağıya, response fazı kodunun aşağıdan yukarıya çalıştığını (ve MIDDLEWARE içindeki sıralamanın önemli olduğunu) anlamak, kendi middleware'inizi doğru yere koymak, bir 403/redirect'in view'inizden önce neden gerçekleştiğini debug etmek ve her view'e dokunmadan mantığı nereye bağlayacağınızı bilmek için gereklidir.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap