ДокументацияОбработчики и ошибки

Файлы промежуточного программного обеспечения

middleware.py в каталоге маршрутов оборачивает запросы, обрабатываемые этим каталогом. Подобно макетам и dependencies.py, файлы укладываются от корня маршрутов вниз, начиная с самого дальнего.

src/routes/admin/middleware.py
from nexy.http import Requestfrom nexy.http import JSONResponse  async def middleware(request: Request, call_next):    if request.headers.get("authorization") != "Bearer secret":        return JSONResponse({"detail": "login required"}, status_code=401)    response = await call_next(request)    response.headers["x-admin"] = "1"    return response

Функция - async def middleware(request, call_next): подпись FastAPI в @app.middleware("http"). Вызовите await call_next(request), чтобы продолжить движение по маршруту, или верните ответ, чтобы остановиться на нем. Код после вызова выполняется на выходе и может изменить ответ.

Что это оборачивает

Промежуточное программное обеспечение применяется к маршрутам, файл которых находится в их каталоге или ниже, как к страницам, так и к обработчикам API, включая группы маршрутов:

src/routes/
middleware.pyevery route
open.pyroot only
admin/
middleware.py/admin and everything below
users/
middleware.py/admin/users and below
index.pyroot > admin > users
(shop)/
middleware.pyonly the routes in this group
cart.pyroot > shop (URL: /cart)

Для запроса к /admin/users порядок следующий: root, admin, users, затем маршрут. У группы нет собственного URL-адреса, поэтому она сопоставляется по маршруту, который обслуживает запрос, а не по URL-адресу.

URL-адрес, который не соответствует никакому маршруту (404), получает только промежуточное программное обеспечение каталогов, которые не являются группами, выбранными по префиксу URL-адреса. [slug] соответствует одному сегменту, а [...rest] - остальному.

Что он не оборачивает

  • URL-адреса платформы и ресурсов: /__nexy__/, /_nexy/, /public/, /assets/ и /@... (Vite).
  • WebSocket обработчики и время жизни сервера: только HTTP-запросы.
  • Файлы в каталогах, начинающиеся с _ или ..

Промежуточное ПО, зависимости или средства защиты

Используйте Когда
middleware.py вам также нужен ответ: заголовки, перенаправления, тайминг, короткое замыкание для всей области
dependencies.py вам нужно проанализировать параметры или ввести значение (текущий пользователь, сеанс базы данных)
@UseGuard в обработчике один маршрут требует дополнительной проверки
useMiddlewares в конфигурация промежуточное программное обеспечение ASGI для всего приложения (CORS, GZip, сеансы)

Файлы промежуточного программного обеспечения выполняются до зависимостей: запрос прошел все middleware.py своих каталогов при запуске зависимостей.

Правила

  • В файле должно быть определено async def middleware(request, call_next). В противном случае Nexy останавливается при запуске и присваивает файлу имя.
  • Это обычный модуль Python: импортируйте то, что вам нужно. Он загружается один раз при запуске сервера.
  • Это никогда не маршрут: /middleware - это ошибка 404.
  • Базовый путь проверяется на request.scope["path"], никогда на request.url.path или заголовке Host: начиная с CVE-2026-48710 объект URL может не соответствовать пути, полученному сервером. См. Безопасность.

Стоимость

Проект без каких-либо middleware.py ничего не платит: слой не устанавливается. В случае с файлами каждое соответствующее промежуточное ПО добавляет Starlette BaseHTTPMiddleware; держите их маленькими.

Следующие шаги

Изменить на GitHub

Enter открывает результат, Esc закрывает.