作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
FastAPI支持為路徑參數、請求參數添加附加信息,起到輔助說明或輔助校驗的作用。
一、請求參數附加信息
對請求參數附加信息的支持,FastAPI通過Query模塊來實現。
1、導入Query模塊
from fastapi import Query
2、基於Query模塊聲明缺省值
可選參數聲明
q: str = Query(None) # 等同於 q: str = None
缺省值參數聲明
q: str = Query("query") # 等同於 q: str = "query"
必選參數聲明
q: str = Query(...) # 等同於 q: str
3、添加附加信息
q: str = Query(None, max_length=50) # 限制q的最大長度不超過50
主要用於字符串參數的附加信息:
min_length:最小長度
max_length:最大長度
regex:正則表達式
主要用於自動化文檔的附加信息:
title:參數標題
description:參數描述信息
deprecated:表示參數即將過期
特殊附加信息:
alias:參數別名
例如:
http://127.0.0.1:8000/items/?item-query=foobaritems
item-query並不是一個合法的Python變量名稱,Python內部會對它進行轉換,為了匹配到正確的參數變量我們就需要使用參數別名。
綜合示例如下:
from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items( q: str = Query( None, alias="item-query", title="Query string", description="Query string for the items to search in the database that have a good match", min_length=3, max_length=50, regex="^fixedquery$", deprecated=True ) ): results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]} if q: results.update({"q": q}) return results
二、請求參數列表
FastAPI基於Query模塊可以支持請求參數列表,例如請求參數q可以在URL中出現多次:
http://localhost:8000/items/?q=foo&q=bar
對應代碼實現如下:
from typing import List from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items(q: List[str] = Query(None)): query_items = {"q": q} return query_items
返回結果內容為:
{ "q": [ "foo", "bar" ] }
當然這里Query也支持請求參數列表的缺省值設置。
from typing import List from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items(q: List[str] = Query(["foo", "bar"])): query_items = {"q": q} return query_items
我們也可以用list代替List[str],但這樣的話FastAPI就無法校驗列表內容了。
from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items(q: list = Query(None)): query_items = {"q": q} return query_items