全面擁抱FastApi-藍圖

      網友投稿 970 2025-04-01

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


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

      這樣既不利于程序的擴展,也不利于程序日后的維護

      在 Flask 中,我們一般用藍圖 Blueprint 來處理

      那么在fastApi 中如何處理呢?

      當然可以,在 fastApi 中使用 APIRouter 處理這種多程序分類

      即類似 Flask 中的藍圖

      APIRouter

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

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

      可以使用來為該模塊創建路徑操作 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}

      全面擁抱FastApi-藍圖

      web 服務中還有另外一個應用模塊,item

      同樣的 通過 APIRouter 來對其路由進行注冊,代碼如下:

      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 給分離開來了

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

      上面便是 APIRouter 最最基礎也是最強大之處,還有其他功能嗎?

      當然有!

      自定義的tags,responses

      細心的朋友應該發現了,在上述 item.py 中實例化 router的時候,傳了好幾個參數

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

      prefix 參數,路由的前綴

      tags 將應用于特定路徑操作的內容

      responses 指特定于該路徑下的響應內容,如上述便指定 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"}

      還支持擴展或重寫,增加其他功能

      但是我們仍然可以添加更多 tags 將應用于特定路徑操作的內容,

      注冊 APIRouter

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

      和之前我們創建主文件一樣導入 FastApi,以及聲明的 APIRouter 實例

      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() 函數就是上面說的注冊。

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

      啟動命令如下:

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

      最后來驗證下打開接口文檔,查看接口

      API Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Word中項目編號怎么設置(項目編號怎么設置word)
      下一篇:Excel數據透視表技能精選每個都是經得起考驗的(excel透視表的功能和使用技巧)
      相關文章
      在线观看亚洲专区| 国产成人精品日本亚洲专一区 | 亚洲伦理中文字幕| 亚洲人成影院在线| 亚洲国产精品无码久久久不卡| 久久久久亚洲AV成人网| 国产啪亚洲国产精品无码| 久久精品国产精品亚洲人人 | 久久亚洲精品国产精品| 中文字幕亚洲精品| 亚洲综合区图片小说区| 亚洲成a人片在线网站| 亚洲中文无码a∨在线观看| 亚洲三级视频在线观看 | 狠狠亚洲狠狠欧洲2019| 亚洲婷婷五月综合狠狠爱| 亚洲日本va中文字幕久久| 国产日韩亚洲大尺度高清| 亚洲AV无码一区东京热久久| 亚洲2022国产成人精品无码区| 亚洲人成电影在在线观看网色| 久久久久亚洲Av无码专| 亚洲欧洲日产韩国在线| 亚洲一区二区免费视频| 亚洲综合精品伊人久久| 爱情岛亚洲论坛在线观看| 亚洲A∨精品一区二区三区| 亚洲日韩国产成网在线观看| 亚洲人成影院在线无码按摩店 | 亚洲精品无码mⅴ在线观看| 国产AV无码专区亚洲AV蜜芽| 亚洲国产精品自产在线播放| 国产亚洲精品AA片在线观看不加载| 亚洲精品无码永久中文字幕| 亚洲精品免费在线观看| 亚洲人成网站在线观看播放青青| 亚洲一区二区三区成人网站| 丁香亚洲综合五月天婷婷| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲精品午夜国产va久久| 亚洲av无码有乱码在线观看|