ДокументацияОбработчики и ошибки
Файлы промежуточного программного обеспечения
middleware.py в каталоге маршрутов оборачивает запросы, обрабатываемые этим каталогом. Подобно макетам и dependencies.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, включая группы маршрутов:
Для запроса к /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; держите их маленькими.