Fastapi 简明教程
FastAPI - Parameter Validation
可以在 URL 的路径参数以及查询参数中应用 validation conditions 。要对路径参数应用验证条件,您需要导入 Path 类。除了参数的默认值外,您还可以为字符串参数指定最大长度和最小长度。
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 的参数(如 ([role="bare"] [role="bare"]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 − greater than
-
ge − 大于或等于
-
lt − less than
-
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}
在这种情况下,验证规则应用于 name 和 age 这两个参数。如果输入的 URL 是 [role="bare"] [role="bare"]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 文档也会识别这些约束。
查询参数还可以对它们应用验证规则。您必须将它们指定为 Query 类构造函数的参数的一部分。
让我们在上述函数中添加一个叫做 percent 的查询参数,同时应用 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 是 [role="bare"] [role="bare"]http://localhost:8000/hello/Ravi/20?percent=79 ,那么浏览器将会显示如下 JSON 响应 −
{"name":"Ravi","age":20}
FastAPI 正确地将 percent 识别为带验证条件的查询参数。它反映在 OpenAPI 文档中,如下所示 −
虽然客户端可以使用 GET 方法向 API 服务器发送路径和查询参数,但是我们需要应用 POST 方法来将一些二进制数据作为 HTTP 请求的一部分发送。这个二进制数据可能是任何 Python 类对象的格式。它形成一个请求体。FastAPI 使用 Pydantic 库用于这一目的。