- Как организовать роутинг в FastAPI с помощью include_router
- Как создать утилиту для централизованного подключения роутеров
- Как настроить редирект с корневого URL
- Как обновить main.py для подключения всех маршрутов
Зачем нужна организация роутинга
По мере роста проекта количество маршрутов увеличивается. Хранить все эндпоинты в одном файле main.py становится неудобно. FastAPI предоставляет механизм APIRouter, который позволяет группировать маршруты в отдельные модули.
В нашем проекте роуты уже разделены по модулям:
core.route— основные маршрутыcore.base.route— маршруты базовых страниц
Нам нужно подключить их все в одном месте.
Создание утилиты routes.py
Создадим файл app/utils/routes.py, который будет централизованно подключать все роутеры приложения.
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from ..core.route import router as core_router
from ..core.base.route import router as core_base_router
def setup_routes(app: FastAPI) -> None:
"""Подключение всех роутеров приложения"""
# Подключаем основные роутеры
app.include_router(core_router)
app.include_router(core_base_router)
# Редирект с корня
@app.get("/")
async def root():
return RedirectResponse(url="/")
Разбор кода routes.py
- app.include_router() — подключает роутер из другого модуля. Все маршруты, определённые в этом роутере, становятся доступны в приложении.
- core_router — импортируется как
routerиз модуляcore.route - core_base_router — импортируется как
routerиз модуляcore.base.route - @app.get("/") — обрабатывает запросы к корневому URL
- RedirectResponse — перенаправляет пользователя на указанный адрес
/. В следующих статьях, когда появится главная страница, мы изменим URL редиректа на нужный.
Обновление main.py
Теперь обновим app/main.py, чтобы использовать созданную утилиту:
from fastapi import FastAPI
from .config import settings
from .utils.cors import setup_cors
from .utils.lifespan import get_lifespan
from .utils.routes import setup_routes
# Создаём приложение
app = FastAPI(
title=settings.APP_NAME,
description=settings.APP_DESCRIPTION,
version=settings.APP_VERSION,
debug=settings.APP_DEBUG,
lifespan=get_lifespan()
)
# Настройки
setup_cors(app)
setup_routes(app)
# Запуск (только при прямом запуске, не при импорте)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host=settings.APP_HOST,
port=settings.APP_PORT,
reload=settings.APP_DEBUG
)
Разбор обновлённого main.py
- setup_routes(app) — подключаем все роутеры и настраиваем редирект
- setup_cors(app) — настройка CORS из предыдущей статьи
- uvicorn.run(...) — запуск сервера с параметрами из настроек
Проверка работы
Запустите сервер:
uvicorn app.main:app --reload
Теперь проверьте:
- Перейдите по адресу http://127.0.0.1:8000/ — редирект должен сработать
- Проверьте, что все маршруты из подключённых роутеров доступны
Итог
Сегодня мы сделали:
- ✅ Создали
app/utils/routes.pyдля централизованного подключения роутеров - ✅ Настроили редирект с корневого URL
- ✅ Обновили
app/main.py - ✅ Проверили работу
- Запустите сервер:
uvicorn app.main:app --reload - Перейдите по адресу
/— редирект должен сработать
После проверки закоммитьте и запушьте изменения в GitHub:
git add .
git commit -m "Добавлен роутинг и редирект с корня"
git push
Следующая статья: Статика (static) — Настройка раздачи статических файлов: CSS, JS, шрифты, изображения.
Ищете хостинг для размещения вашего проекта в сети Интернет?
Посмотрите здесь →
Реклама. ООО «Бегет» ИНН 7801451618 erid: 2VtzqxQSRkE