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