__call__, после чего добавляют его путь в настройку MIDDLEWARE.
__call__, после чего добавляют его путь в настройку MIDDLEWARE.
Что такое middleware
Middleware — это компонент, который обрабатывает каждый HTTP-запрос до view и каждый HTTP-ответ после view. Через middleware реализованы многие стандартные возможности Django: сессии, аутентификация, CSRF-защита, безопасность и работа с сообщениями.
Пример собственного middleware
import time
import logging
logger = logging.getLogger(__name__)
class RequestTimeMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
started_at = time.monotonic()
response = self.get_response(request)
duration = time.monotonic() - started_at
logger.info('Request %s completed in %.3f s', request.path, duration)
return responseКак подключить
Путь к классу добавляют в список MIDDLEWARE в settings.py. Порядок важен: запрос проходит middleware сверху вниз, а ответ возвращается в обратном направлении.
MIDDLEWARE = [
'myapp.middleware.RequestTimeMiddleware',
]Для чего используют
Middleware применяют для логирования, заголовков безопасности, мультитенантности, трассировки запросов, локализации и других задач, которые относятся ко всем или многим запросам. В тяжёлых middleware не стоит выполнять лишние запросы к базе, поскольку они влияют на каждый запрос.
Как ответить на собеседовании
Middleware — это промежуточный слой обработки HTTP-запросов и ответов. Я создаю класс, принимающий get_response, реализую __call__ и добавляю его в MIDDLEWARE, учитывая порядок выполнения.
Оцени свой прогресс