FastAPI 参数验证
可以对路径参数以及URL的查询参数应用 验证条件 。为了在路径参数上应用验证条件,你需要导入路径类。除了参数的默认值外,如果是字符串参数,你可以指定最大和最小长度。
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/hello/{name}")
async def hello(name:str=Path(...,min_length=3,
max_length=10)):
return {"name": name}
如果浏览器的URL包含长度小于3或大于10的参数,如(http://localhost:8000/hello/Tutorialspoint),则会出现适当的错误消息,如 −
{
"detail": [
{
"loc": [
"path",
"name"
],
"msg": "ensure this value has at most 10 characters",
"type": "value_error.any_str.max_length",
"ctx": {
"limit_value": 10
}
}
]
}
OpenAPI的文档也显示了应用的验证 —
验证规则也可以应用在数字参数上,使用下面给出的运算符。
- gt – 大于
-
ge – 大于或等于
-
lt – 小于
-
le – 小于或等于
让我们修改上述操作装饰器,将年龄作为路径参数,并应用验证。
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/hello/{name}/{age}")
async def hello(*, name: str=Path(...,min_length=3 , max_length=10), age: int = Path(..., ge=1, le=100)):
return {"name": name, "age":age}
在这种情况下,验证规则同时适用于参数名称和年龄。如果输入的URL是http://localhost:8000/hello/hi/110,那么JSON响应显示以下验证失败的解释 –
{
"detail": [
{
"loc": [
"path",
"name"
],
"msg": "ensure this value has at least 3 characters",
"type": "value_error.any_str.min_length",
"ctx": {
"limit_value": 3
}
},
{
"loc": [
"path",
"age"
],
"msg": "ensure this value is less than or equal to 100",
"type": "value_error.number.not_le",
"ctx": {
"limit_value": 100
}
}
]
}
swagger UI文档也指出了这些约束。
查询参数也可以有适用于它们的验证规则。你必须指定它们作为查询类构造函数的参数的一部分。
让我们在上述函数中添加一个名为 百分数 的查询参数,并应用验证规则为 ge=0 (即大于等于0)和 lt=100 (小于等于100)。
from fastapi import FastAPI, Path, Query
@app.get("/hello/{name}/{age}")
async def hello(*, name: str=Path(...,min_length=3 ,
max_length=10), \
age: int = Path(..., ge=1, le=100), \
percent:float=Query(..., ge=0, le=100)):
return {"name": name, "age":age}
如果输入的URL是http://localhost:8000/hello/Ravi/20?percent=79,那么浏览器会显示以下JSON响应—-。
{"name":"Ravi","age":20}
FastAPI正确地将百分比识别为应用了验证条件的查询参数。它在OpenAPI文档中反映如下:
虽然客户端可以使用GET方法向API服务器发送路径和查询参数,但我们需要应用POST方法来发送一些二进制数据作为HTTP请求的一部分。这个二进制数据可以是任何Python类的对象的形式。它构成了请求主体。FastAPI使用Pydantic库来实现这一目的。