Ответ
В Django функция middleware получает один аргумент — get_response.
get_response — это вызываемый объект (callable), который представляет собой следующий слой middleware в цепочке или, если это последний слой, саму view-функцию. Middleware должно вернуть внутреннюю функцию middleware(request), которая и будет вызываться для обработки запроса.
Структура Django Middleware
Современный middleware в Django реализуется как фабрика — функция, которая возвращает другую функцию.
- Внешняя функция (
simple_middleware): Вызывается один раз при старте сервера. Её задача — выполнить первоначальную настройку и вернутьmiddleware. - Внутренняя функция (
middleware): Вызывается для каждого запроса. Она принимает объектrequest.
Пример:
# myapp/middleware.py
def simple_middleware(get_response):
# Код здесь выполняется один раз при инициализации
print("Middleware initialized")
def middleware(request):
# Код здесь выполняется перед вызовом view
print(f"Processing request: {request.path}")
# Передача управления следующему middleware или view
response = get_response(request)
# Код здесь выполняется после того, как view отработала
response['X-Custom-Header'] = 'Processed by middleware'
print("Processing response")
return response
return middleware
Ключевые моменты:
request: ОбъектHttpRequest, который можно модифицировать до передачи в view.response: ОбъектHttpResponse, полученный от view, который можно изменить перед отправкой клиенту.- Порядок: Код до
get_response(request)выполняется "на пути внутрь" (request phase), а код после — "на пути наружу" (response phase).