5.1 Структурирование FastAPI, APIRouter и написание моделей Pydantic
4 из 4 шагов пройдено

Мы завершили операции пути для маршрута category. Следующим шагом является передача этих маршрутов в главный файл, чтобы мы могли протестировать определенные операции пути. Класс APIRouter работает так же, как и класс FastAPI. Однако uvicorn не может использовать экземпляр APIRouter для обслуживания приложения, в отличие от FastAPI.

Маршруты, определенные с помощью класса APIRouter, добавляются в экземпляр FastAPI для обеспечения их видимости.

Для этого существует метод include_router(), который отвечает за добавление маршрутов, определенных с помощью класса APIRouter, в экземпляр основного приложения, чтобы сделать маршруты видимыми.

В файл main.py добавим следующий код:

from fastapi import FastAPI
from app.routers import category

app = FastAPI()


@app.get("/")
async def welcome() -> dict:
    return {"message": "My e-commerce app"}


app.include_router(category.router)

В этом файле мы импортируем наши маршруты from app.routers import category и подключаем их через app.include_router(category.router)

Запустим сервер через команду uvicorn app.main:app --reload и проверим работу перейдя в документацию:

Мы видим что наши маршруты для категорий успешно были добавлены, и при этом сгруппированы в документации, так как мы используем tags=['category']

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

from fastapi import APIRouter

router = APIRouter(prefix='/products', tags=['products'])


@router.get('/')
async def all_products():
    pass


@router.post('/create')
async def create_product():
    pass


@router.get('/{category_slug}')
async def product_by_category(category_slug: str):
    pass


@router.get('/detail/{product_slug}')
async def product_detail(product_slug: str):
    pass


@router.put('/detail/{product_slug}')
async def update_product(product_slug: str):
    pass


@router.delete('/delete')
async def delete_product(product_id: int):
    pass

В файл products.py мы добавили следующие пути:

  • Метод получения всех товаров
  • Метод создания товара
  • Метод получения товаров определенной категории
  • Метод получения детальной информации о товаре
  • Метод изменения и удаления товара

Теперь давайте подключим пути определенных с помощью класса APIRouter, в экземпляр основного приложения, чтобы сделать маршруты видимыми.

from fastapi import FastAPI
from app.routers import category, products

app = FastAPI()


@app.get("/")
async def welcome() -> dict:
    return {"message": "My e-commerce app"}


app.include_router(category.router)
app.include_router(products.router)

Запустим сервер командой uvicorn app.main:app --reload, и мы увидим что наши маршруты были добавлены, при этом они сгруппированы по тегу.

Последнее, что нам необходимо, это создать модели для наших категорий и товаров, чем мы и займемся в следующем шаге 


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.