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實例化類上注冊這個路徑操作,修改后我們看下實際的效果,檢驗我們實際的效果。

 

 

 

      依然是實現了,我們之前的需求。那么我們接下來按照不一樣的模塊進行划分,最后都歸納到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

  我們看下最后的接口請求

 

 我們的接口請求還是正確的。證明我們的改造是沒有問題的。我們看下最后的目錄

 

 

 這就是我們最后的目錄。

        我們想要給每一個路由都增加一個通用的路徑前綴,並且每個都有對應的tag,我們應該如何實現呢,其實答案很簡單

        

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

我們看下最后的接口是否增加了對應的,我們看下接口的請求

 

 

 

  我們可以看到兩個模塊的接口都改造完畢,但是我們說的tag,如何可以看到具體的效果呢,我們可以看下http://localhost:8000/docs的接口文檔。

 

   在復雜的應用上,我們可以根據不同模塊,創建對應的路徑操作。當然,我們在參數中還可以傳遞對應的依賴。

 

 

我們可以看下使用的方法,里面有很多參數,我們是可以傳遞的,具體的可以根據自己的需要進行傳遞。

文章首發在公眾號,歡迎關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM