PRO

Что такое middleware? Как написать своё?

Middleware в Django — это слой обработки запросов и ответов между веб-сервером и view. Собственное middleware создают как callable-класс с методом __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, учитывая порядок выполнения.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге