FastAPI 依賴注入系統(三) 子依賴項


作者:麥克煎蛋   出處: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}

 


免責聲明!

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



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