Какие знаешь виды middleware

Ответ

В Django middleware — это промежуточный слой между запросом и ответом, обрабатывающий их на разных этапах. Основные виды:

  1. Request Middleware — обрабатывает запрос до view (например, аутентификация, CORS).
  2. View Middleware — выполняется перед вызовом view (например, CSRF-проверка).
  3. Response Middleware — обрабатывает ответ после view (например, сжатие gzip).
  4. Exception Middleware — перехватывает исключения (например, кастомные ошибки).

Пример простого middleware:

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # До view
        print("До view")
        response = self.get_response(request)
        # После view
        print("После view")
        return response

Middleware регистрируется в settings.py в MIDDLEWARE. Порядок важен — они выполняются сверху вниз для запроса и снизу вверх для ответа.

Ответ 18+ 🔞

Да ты посмотри, что за хуйня такая middleware в Django! Это ж типа как швейцар в дорогой конторе, блядь, или как фильтр в кофе-машине — всё пропускает через себя, а потом уже по назначению.

Вот смотри, запрос прилетает, а его на входе встречает эта самая промежуточная прослойка, сука. Их там, этих прослоек, как говна за баней — целая куча, и каждая со своей задачей.

Какие они бывают, эти засранцы:

  1. Request Middleware — это те, кто запрос обнюхивает первыми. Типа: «А ты кто такой? Пароль знаешь? Откуда припёрся, блядь?» (аутентификация, CORS). Не пустит дальше — и всё, пиши пропало.
  2. View Middleware — уже почти у самой цели, но ещё нет. Последний контроль, типа: «А CSRF-токен у тебя есть, шалун? А то щас как дам по рукам!»
  3. Response Middleware — когда вьюха уже отработала и выдала ответ. Эти его прихорашивают: сжимают в gzip, чтоб поменьше весил, или ещё какую хуйню делают.
  4. Exception Middleware — это спасатели, ёпта. Если где-то в цепочке пиздец случился и исключение вылетело, они его ловят, чтобы пользователю не голую ошибку сервера показывать, а что-то человеческое.

Вот тебе пример, проще некуда, блядь:

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # Это выполнится ДО вьюхи
        print("До view")
        response = self.get_response(request)
        # А это — ПОСЛЕ вьюхи
        print("После view")
        return response

А самое главное, ёпта, порядок! Всё решает порядок в settings.py, в этом списке MIDDLEWARE. Запрос идёт сверху вниз по списку — как по конвейеру. А ответ, сука, идёт обратно — снизу вверх! Перепутаешь — и будет у тебя аутентификация после сжатия ответа, ну, полный пиздец, короче.