作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
我們可以創建有子依賴項的依賴項,具體依賴深度不受限制。
FastAPI會處理好依賴項之間的關系。
我們先聲明第一個依賴項函數:
def query_extractor(q11: str, q12: str): return q11 + q12
然后聲明第二個依賴項函數:
def query_or_cookie_extractor(q2: str = Depends(query_extractor), last_query: str = Cookie(None)): if not q2: return last_query return q2
在第二個依賴項函數中,同時又聲明了它對第一個依賴項函數的依賴。
完整示例:
from fastapi import Cookie, Depends, FastAPI app = FastAPI() def query_extractor(q11: str, q12: str): return q11 + q12 def query_or_cookie_extractor(q2: str = Depends(query_extractor), last_query: str = Cookie(None)): if not q2: return last_query return q2 @app.get("/items/") async def read_query(query_or_default: str = Depends(query_or_cookie_extractor)): return {"q_or_cookie": query_or_default}
我們在路徑操作函數中,僅聲明了一個依賴項query_or_cookie_extractor。
但FastAPI知道它必須首先解決第一個依賴項query_extractor,然后把結果傳遞給第二個依賴項。
通過可交互式文檔,我們可以直觀的看到實際路徑參數:
通過可交互式文檔我們可以及時進行文檔查看以及代碼調試。
依賴項的多次調用
如果某個依賴項在同一個路徑操作中被聲明了多次,例如,多個依賴項都有一個共同的子依賴項,那么FastAPI默認在每一次請求中只會調用這個依賴項一次。
FastAPI會把這個依賴項的返回值緩存起來,然后把這個值傳遞給需要的依賴項,而不是在同一個請求中多次調用這個依賴項。
在有些場景下,我們並不需要緩存這個依賴項的返回值,而是需要多次調用,那么我們可以使用參數use_cache=False
來禁止依賴項的緩存。
async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)): return {"fresh_value": fresh_value}