Зачем нужна организация роутинга

По мере роста проекта количество маршрутов увеличивается. Хранить все эндпоинты в одном файле 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 — перенаправляет пользователя на указанный адрес

Обновление 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

Теперь проверьте:

  1. Перейдите по адресу http://127.0.0.1:8000/ — редирект должен сработать
  2. Проверьте, что все маршруты из подключённых роутеров доступны

Итог

Сегодня мы сделали:

  • ✅ Создали app/utils/routes.py для централизованного подключения роутеров
  • ✅ Настроили редирект с корневого URL
  • ✅ Обновили app/main.py
  • ✅ Проверили работу

После проверки закоммитьте и запушьте изменения в GitHub:

git add .
git commit -m "Добавлен роутинг и редирект с корня"
git push

Следующая статья: Статика (static) — Настройка раздачи статических файлов: CSS, JS, шрифты, изображения.


Ищете хостинг для размещения вашего проекта в сети Интернет?
Посмотрите здесь →

Реклама. ООО «Бегет» ИНН 7801451618 erid: 2VtzqxQSRkE