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

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

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


from fastapi import APIRouter
router=APIRouter()
app = FastAPI()
# 新建用户
@router.post("/users/", tags=["users"], response_model=Users)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_crest = get_user_emai(db, user.email)
    if not db_crest:
        return db_create_user(db=db, user=user)
    raise HTTPException(status_code=200, detail="账号不能重复")
app.include_router(router)


 基于前面的代码演示的,其实改造很简单,我们引入对应类即可,然后在对应的接口上使用,最后在我们的app实例化类上注册这个路径操作,修改后我们看下实际的效果,检验我们实际的效果.


image.png


依然是实现了,我们之前的需求。那么我们接下来按照不一样的模块进行划分,最后都归纳到routers目录。


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


       那么看下items目录怎么实现的.


from fastapi import APIRouter
from fastapi import  Depends
from models.crud import *
from models.database import *
itemsRouter=APIRouter()
def get_db():
    """
    每一个请求处理完毕后会关闭当前连接,不同的请求使用不同的连接
    :return:
    """
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
# 所有item
@itemsRouter.get("/items/", response_model=List[Items])
def read_items(skip: int = 0, limit: int = 0, db: Session = Depends(get_db)):
    items = get_item(db=db, skip=skip, limit=limit)
    return items


 下面是user文件如何实现的


from fastapi import APIRouter
from fastapi import  Depends,HTTPException
from models.crud import *
from models.database import *
usersRouter=APIRouter()
def get_db():
    """
    每一个请求处理完毕后会关闭当前连接,不同的请求使用不同的连接
    :return:
    """
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
# 新建用户
@usersRouter.post("/users/", tags=["users"], response_model=Users)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_crest = get_user_emai(db, user.email)
    if not db_crest:
        return db_create_user(db=db, user=user)
    raise HTTPException(status_code=200, detail="账号不能重复")
@usersRouter.post("/user/item/{user_id}", response_model=List[Items])
def get_user_items(user_id: int, db: Session = Depends(get_db)):
    return get_user_item(db=db, userid=user_id)
# 通过id查询用户
@usersRouter.get("/user/{user_id}", response_model=Users)
def read_user(user_id: int, db: Session = Depends(get_db)):
    db_user = get_user(db, user_id=user_id)
    if not db_user:
        raise HTTPException(status_code=404, detail="用户查找不到")
    return db_user
# 创建用户的item
@usersRouter.post("/users/{user_id}/items", response_model=Items)
def create_item_user(user_id: int, item: ItemCreate, db: Session = Depends(get_db)):
    return create_user_item(db=db, item=item, user_id=user_id)


 那么我们看下最后的main文件


from fastapi import FastAPI
from routers.user import usersRouter
from routers.items import itemsRouter
app = FastAPI()
app.include_router(usersRouter)
app.include_router(itemsRouter)


我们正常去启动下


uvicorn main:app --reload


我们看下最后的接口请求


image.png


我们的接口请求还是正确的。证明我们的改造是没有问题的。我们看下最后的目录


image.png


这就是我们最后的目录。


       我们想要给每一个路由都增加一个通用的路径前缀,并且每个都有对应的tag,我们应该如何实现呢,其实答案很简单


app.include_router(usersRouter,prefix="/user",tags=['users'])
app.include_router(itemsRouter,prefix="/items",tags=['Itmes'])


我们看下最后的接口是否增加了对应的,我们看下接口的请求


image.png


image.png


我们可以看到两个模块的接口都改造完毕,但是我们说的tag,如何可以看到具体的效果呢,我们可以看下http://localhost:8000/docs的接口文档。

       

image.png


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


image.png


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

相关文章
|
7月前
|
存储 IDE API
最佳实践:通过 FastAPI APIRouter 提升开发效率
FastAPI 是一个现代的、高性能的 Python Web 框架,它提供了 APIRouter 来帮助组织和管理路由。APIRouter 是一个可用于组织和分组路由的类,使得代码结构更加清晰和可维护。本文将介绍 FastAPI APIRouter 的用法,包括实践案例以及在 IDE 编辑器中的运行步骤。
|
9月前
|
API Python
全面拥抱FastApi — 蓝图APIRouter
全面拥抱FastApi — 蓝图APIRouter
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论
FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论