app.frontend().Теперь собранный фронтенд раздаётся прямо из FastAPI, без отдельного nginx или статик-сервера:
app.frontend("/", directory="dist")Кладёте билд SPA в
dist, одна строка, и приложение само отдаёт его на корне. Есть и router.frontend() для поддерева.Под капотом в 0.137.0 переписали то, как роутеры включаются друг в друга:
🔘раньше
include_router() клонировал каждый путь в один плоский список, и в итоге на всё приложение оставался один роутер;🔘теперь исходные объекты
APIRouter и APIRoute сохраняются, а router.routes стал деревом промежуточных объектов;🔘из-за этого маршруты можно добавлять в подроутер уже после
include_router(), изменения подхватятся, потому что роуты не копируются;🔘в части случаев это ещё и экономит память.
Здесь же спрятан ломающий момент: если ваш код ходил по
router.routes как по плоскому списку APIRoute, он сломается, теперь это дерево. Для таких сценариев в 0.137.2 добавили iter_route_contexts().@zen_of_python