FastAPI中如何處理逗號分隔的列表查詢參數?

FastAPI中如何處理逗號分隔的列表查詢參數?

fastapi 列表參數的逗號分隔處理方法詳解

在使用FastAPI構建API時,經常需要處理列表類型的查詢參數。FastAPI默認將相同名稱的查詢參數解析為列表,例如?source=manual&source=vdna會被解析為source=[‘manual’, ‘vdna’]。但有時我們需要用逗號分隔的字符串傳遞列表參數,例如?source=manual,vdna。本文介紹兩種解決方法

問題根源:原始代碼中,source參數定義為list[source]類型,導致FastAPI將重復參數解析為列表,而非逗號分隔的字符串。

方法一:字符串參數及手動解析

最直接的方法是將source參數類型改為Optional[str],并在函數內部手動解析逗號分隔的字符串。此方法簡單易懂,無需額外依賴。

代碼示例:

@review.get('/list', summary='獲取待審核列表') def list_await_review(     # ... other parameters ...     source: Optional[str] = Query(None, description="請用`,`分割多個參數,如`Manual,vDNA,text-match`"),     # ... other parameters ... ):     parsed_source = source.split(",") if source else []     # ...后續代碼使用parsed_source...

此方法將source解析為字符串,然后使用split(“,”)方法將其分割成列表。若source為空,則parsed_source為空列表。

方法二:自定義解析過程 (高級方法)

更靈活的方法是自定義解析過程,例如創建自定義依賴項處理逗號分隔字符串。此方法能處理更復雜的解析邏輯,但需要編寫更多代碼,并需要更深入理解FastAPI的依賴注入機制。 官方文檔推薦使用Annotated增強參數校驗和類型提示,在處理復雜參數時更有優勢,但實現細節超出了本文范圍。

選擇哪種方法取決于你的需求和FastAPI熟練程度。對于簡單的逗號分隔列表參數,方法一足夠高效簡潔;而對于更復雜的場景,方法二提供了更大的靈活性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享