作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
FastAPI有一個強大並且簡單易懂的系統:依賴注入系統。
什么是"依賴注入"
"依賴注入"首先意味着在程序中我們的代碼可以聲明一些它必須依賴的項:我們稱之為dependencies,也就是依賴項。
然后,在實際運行中,FastAPI會把所有需要的依賴項提供給你的代碼,稱之為"注入"依賴項。
"依賴注入"非常適用於以下使用場景:
1、業務邏輯復用
2、共享數據庫連接
3、安全機制、權限校驗、角色管理等等
4、其他使用場景
所有上述使用場景,借助於"依賴注入"可以明確的提高代碼復用,減少代碼重復。
接下來我們看一個非常簡單的例子,了解下依賴注入系統是怎么工作的。
導入 Depends
from fastapi import Depends, FastAPI
創建依賴項
依賴項實際上是一個函數,它接收所有路徑操作函數應當接收的函數參數。
async def common_parameters(q: str = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit}
這里我們可以用async def或者def來聲明函數,FastAPI知道怎么來處理。
聲明依賴
在路徑操作函數的參數中使用Depends
聲明依賴,與使用Body、Query等的方式相同。
@app.get("/items/") async def read_items(commons: dict = Depends(common_parameters)): return commons
Depends
僅接收一個函數類型的參數。
調用依賴項
當一個新的請求到來的時候,實際調用流程如下:
1、調用依賴項函數(傳遞合適的參數)
2、得到依賴項函數的返回結果
3、把返回結果傳遞給路徑操作函數中的對應參數
完整工程實例:
from fastapi import Depends, FastAPI app = FastAPI() async def common_parameters(q: str = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") async def read_items(commons: dict = Depends(common_parameters)): return commons @app.get("/users/") async def read_users(commons: dict = Depends(common_parameters)): return commons