FastAPI 学习之路(三十六)引入APIRouter

本次调整后的目录如下:

我们可以使用APIRouter来声明路径操作,我们先看下如何去使用。

 我们根据选择划分为users和items来细分。

具体实现如下:

①先看items实现

from fastapi import APIRouter
from fastapi import Depends
from models.crud import *


item_router = APIRouter()
from . import create_db


@item_router.post("/items/{uid}", response_model=ItemOut)
def create_item_by_user(uid: int, item: ItemModel, db: Session = Depends(create_db)):
    return create_item_by_user_method(db, uid, item)


@item_router.get("/items", response_model=List[ItemOut])
def get_items(skip: int = 0, limit: int = 10, db: Session = Depends(create_db)):
    return get_items_method(db, skip, limit)


@item_router.get("/items/{uid}", response_model=List[ItemOut])
def get_items_by_uid(uid: int, db: Session = Depends(create_db)):
    return get_items_by_uid_method(db, uid)

下面是users的实现方式

from fastapi import APIRouter
from fastapi import Depends
from models.crud import *

user_router = APIRouter()
from . import create_db


@user_router.post("/user", response_model=UserOut)
def create_user(user: UserModel, db: Session = Depends(create_db)):
    return create_user_method(db, user)


@user_router.get("/user", response_model=UserOut)
def get_user(uid: int, db: Session = Depends(create_db)):
    return get_user_method(db, uid)

我们最后看下main文件 

from fastapi import FastAPI
from routers.users import user_router
from routers.items import item_router


app = FastAPI()
app.include_router(user_router)
app.include_router(item_router)


if __name__ == '__main__':
    import uvicorn
    uvicorn.run("main:app", reload=True)

其中,我们暂时把create_db方法提取到__init__.py中,否则会引起循环引用的错误,如下:

from models.database import SessionLocal


def create_db():
    """每个请求处理完毕后关闭当前连接,不同的请求使用不同的链接"""
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

 重新启动我们的服务,测试下是否可以

我们的接口请求还是正确的,证明我们的改造是没有问题的。

如果想要给每一个路由都加一个通用的路径前缀标识,并且每个都有对应的tag,如下即可实现:

app.include_router(user_router, prefix="/u", tags=["users"])
app.include_router(item_router, prefix="/i", tags=["items"])

我们看下最后的接口是否增加了对应的前缀才可以访问

没有问题,根据我们的改造方式没有问题,那么tags如何看到效果呢?如下:

在复杂的应用上,我们可以根据不同模块,创建对应的路径操作。当然,我们在参数中还可以传递对应的依赖。

我们可以看下使用的方法,里面有很多参数,我们是可以传递的,具体的可以根据自己的需要进行传递。 

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值