Ответ
Middleware — это промежуточный слой обработки, который находится между веб-сервером и представлением (view). Он позволяет выполнять сквозную логику для каждого запроса или ответа, не дублируя код в каждом обработчике.
Основные задачи Middleware:
- Аутентификация и авторизация: Проверка прав доступа пользователя.
- Логирование: Запись информации о запросах и ответах.
- Обработка сессий: Управление данными сессии.
- Добавление заголовков: Например,
CORSилиContent-Security-Policy. - Сжатие ответов: Например, с помощью Gzip.
Реализация в FastAPI
В FastAPI Middleware реализуется с помощью декоратора @app.middleware("http") для асинхронных функций.
from fastapi import FastAPI, Request
import time
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
# Добавляем кастомный заголовок со временем обработки
response.headers["X-Process-Time"] = str(process_time)
return response
Реализация в Django
В Django Middleware обычно реализуется как класс с методами __init__ и __call__.
# myapp/middleware.py
class SimpleLoggingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# Код, который выполняется перед обработкой view
print(f"Processing request: {request.path}")
response = self.get_response(request)
# Код, который выполняется после обработки view
print(f"Response status code: {response.status_code}")
return response
# settings.py
MIDDLEWARE = [
# ...
'myapp.middleware.SimpleLoggingMiddleware',
# ...
]