<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          全面擁抱FastApi — 藍(lán)圖APIRouter

          共 2796字,需瀏覽 6分鐘

           ·

          2021-01-30 23:07

          我們都知道在大型的應(yīng)用程序或者 web api 中, 我們很少在一個文件中寫入多個路由

          將所有的請求方法寫在同一個處理文件下面的話,會導(dǎo)致我們的代碼顯得很沒有邏輯性

          這樣既不利于程序的擴(kuò)展,也不利于程序日后的維護(hù)

          在 Flask 中,我們一般用藍(lán)圖 Blueprint 來處理

          那么在FastApi 中如何處理呢?

          當(dāng)然可以,在 FastApi 中使用 APIRouter 處理這種多程序分類

          即類似 Flask 中的藍(lán)圖

          APIRouter

          假設(shè)專門用于處理用戶的文件是的子模塊/app/routers/users.py

          您希望將與用戶相關(guān)的路徑操作與其余代碼分開,使其看起來簡潔明了。

          可以使用來為該模塊創(chuàng)建路徑操作 APIRouter。

          from?fastapi?import?APIRouter

          router?=?APIRouter()


          @router.get("/users/",?tags=["users"])
          async?def?read_users():
          ????return?[{"username":?"Rick"},?{"username":?"Morty"}]


          @router.get("/users/me",?tags=["users"])
          async?def?read_user_me():
          ????return?{"username":?"fakecurrentuser"}


          @router.get("/users/{username}",?tags=["users"])
          async?def?read_user(username:?str):
          ????return?{"username":?username}

          web 服務(wù)中還有另外一個應(yīng)用模塊,item

          同樣的 通過 APIRouter 來對其路由進(jìn)行注冊,代碼如下:app/routers/items.py

          from?fastapi?import?APIRouter,?Depends,?HTTPException

          from?..dependencies?import?get_token_header

          router?=?APIRouter(
          ????prefix="/items",
          ????tags=["items"],
          ????responses={404:?{"description":?"Not?found"}},
          )

          @router.get("/")
          async?def?read_items():
          ????return?fake_items_db


          @router.get("/{item_id}")
          async?def?read_item(item_id:?str):
          ????if?item_id?not?in?fake_items_db:
          ????????raise?HTTPException(status_code=404,?detail="Item?not?found")
          ????return?{"name":?fake_items_db[item_id]["name"],?"item_id":?item_id}

          這樣就將兩個功能模塊 item, user 給分離開來了

          后期我們想更新或擴(kuò)展 user 模塊的功能,并不會對 item 造成影響!

          上面便是 APIRouter 最最基礎(chǔ)也是最強(qiáng)大之處,還有其他功能嗎?

          當(dāng)然有!

          自定義的tags,responses

          細(xì)心的朋友應(yīng)該發(fā)現(xiàn)了,在上述 item.py 中實(shí)例化 router的時候,傳了好幾個參數(shù)

          一起來看看分別代表什么含義!

          prefix 參數(shù),路由的前綴

          tags 將應(yīng)用于特定路徑操作的內(nèi)容

          responses 指特定于該路徑下的響應(yīng)內(nèi)容,如上述便指定 404 的返回信息

          @router.put(
          ????"/{item_id}",
          ????tags=["custom"],
          ????responses={403:?{"description":?"Operation?forbidden"}},
          )
          async?def?update_item(item_id:?str):
          ????if?item_id?!=?"plumbus":
          ????????raise?HTTPException(
          ????????????status_code=403,?detail="You?can?only?update?the?item:?plumbus"
          ????????)
          ????return?{"item_id":?item_id,?"name":?"The?great?Plumbus"}

          還支持?jǐn)U展或重寫,增加其他功能

          但是我們?nèi)匀豢梢蕴砑痈?tags 將應(yīng)用于特定路徑操作的內(nèi)容,

          注冊 APIRouter

          最后一個步驟就是要將我們的 APIRouter 注冊到核心對象上去

          和之前我們創(chuàng)建主文件一樣導(dǎo)入 FastApi,以及聲明的 APIRouter 實(shí)例

          main.py文件

          from?fastapi?import?Depends,?FastAPI

          from?.dependencies?import?get_query_token,?get_token_header
          from?.internal?import?admin
          from?.routers?import?items,?users

          app?=?FastAPI(dependencies=[Depends(get_query_token)])


          app.include_router(users.router)
          app.include_router(items.router)
          app.include_router(
          ????admin.router,
          ????prefix="/admin",
          ????tags=["admin"],
          ????dependencies=[Depends(get_token_header)],
          ????responses={418:?{"description":?"I'm?a?teapot"}},
          )


          @app.get("/")
          async?def?root():
          ????return?{"message":?"Hello?Bigger?Applications!"}

          其中 include_router() 函數(shù)就是上面說的注冊。

          這時候就完成了,使用該 app 來啟動服務(wù)即可

          啟動命令如下:

          uvicorn?main:app?--host=0.0.0.0?--port=8800

          最后來驗(yàn)證下打開接口文檔,查看接口


          end


          瀏覽 77
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91九色首页 | 欧美一级国产一级日韩一级 | 特级黄色录相片 | 国产精品成人无码久久久 | 日批视频免费 |