Middleware w Django to (logika) / klasy, które mogą przetwarzać każde żądanie i odpowiedź przychodzące do i wychodzące z aplikacji Django.
Daje możliwość dodawania globalnych funkcjonalności i modyfikowania zachowania aplikacji na poziomie całego projektu.
Kluczowe momenty wywołań:
Przed widokiem:
process_request (opcjonalne).
__call__ (właściwe wejście middleware).
Podczas przetwarzania widoku:
Widok działa.
Jeśli wyjątek → process_exception.
Po widoku:
process_response modyfikuje odpowiedź.
Tworzenie własnego middleware,
Middleware w Django to klasa, która musi zawierać co najmniej jedną z następujących metod:
class CustomMiddleware:
__init__(self, get_response):
Inicjalizacja middleware. get_response to funkcja wywoływana przy każdym żądaniu.
__call__(self, request):
Przetwarzanie żądania i generowanie odpowiedzi.
Opcjonalne metody:
process_request(self, request):
Przetwarzanie żądania przed dotarciem do widoku.
process_response(self, request, response):
Przetwarzanie odpowiedzi przed jej wysłaniem do klienta.
process_exception(self, request, exception):
Obsługa wyjątków generowanych przez widok.
Własny middleware dodający nagłówek w odpowiedzi:
# middleware.py:
class AddApiVersionMiddleware:
def __init__(self, get_response): # type: ignore
self.get_response = get_response
def __call__(self, request): # type: ignore
response = self.get_response(request)
# Add a custom header
response["X-API-Version"] = "v1.0"
return response
# settings.py
MIDDLEWARE = [
"library_api.middleware.AddApiVersionMiddleware",
...
]