使用Path可以对路径参数声明与Query相同类型的校验和元数据
from typing import Annotated
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
item_id: Annotated[int, Path(title="The ID of the item to get")],
q: Annotated[str | None, Query(alias="item-query")] = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
路径参数一定是必需的,因为它必须是路径的一部分。
按需对参数进行排序
当声明一个必需的str类型查询参数时,并且不需要任何校验,所以不需要使用Query。但是仍需要使用Path来声明路径参数时,如果你将带有「默认值」的参数放在没有「默认值」的参数之前,Python 将会报错(这是python函数语法要求的,FastApi是不在乎顺序的)
可以通过传递*来作为第一个函数,这样python就知道之后的所有参数都应作为关键字参数(键值对),也被称为 kwargs
,来调用。即使它们没有默认值
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(*, item_id: int = Path(title="The ID of the item to get"), q: str):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
数值校验
使用Query或Path都可以声明字符串约束,也可以声明数值约束
gt
:大于(g
reatert
han)ge
:大于等于(g
reater than ore
qual)lt
:小于(l
esst
han)le
:小于等于(l
ess than ore
qual)
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
*,
item_id: int = Path(title="The ID of the item to get", ge=0, le=1000),
q: str,
size: float = Query(gt=0, lt=10.5),
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results