FastAPI允许为参数声明附加信息与校验。
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = None):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
查询参数 q
的类型时 Optional[str]
,即它的类型是 str
,但也可以是 None
(其实,是它的默认值为None),q
是可选参数。
附件校验
接下来,添加一些约束条件,即使 q 是可选的,但只要提供了该参数,该参数的长度就不能超过50个字符。
导入Query,以Query为默认值。
from typing import Optional
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, max_length=50)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
把Query
作为查询参数的默认值,并把max_length
参数设置为50。此处使用Query(None)
代替None作为默认值,Query
的第一个参数也用于定义默认值。
q: Optional[str] = Query(None)
等效于 q: Optional[str] = None
这样就可以为Query
传递更多参数,本例中使用max_length
参数约束字符串。
q: str = Query(None, max_length=50)
这行代码会校验数据,在数据无效时显示错误。
添加更多校验
from typing import Optional
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, min_length=3, max_length=50)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
添加正则表达式
FastAPI还能定义必须与正则表达式匹配的参数。
from typing import Optional
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(
q: Optional[str] = Query(None, min_length=3, max_length=50, regex="^fixedquery$")
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
标记为必选
使用 Query
把查询参数声明为必选时,第一个参数的值应为 ...
:
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(..., min_length=3)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results