FastAPI 参数验证

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的文档也显示了应用的验证 —

FastAPI - 参数验证

验证规则也可以应用在数字参数上,使用下面给出的运算符。

  • 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文档也指出了这些约束。

FastAPI - 参数验证

查询参数也可以有适用于它们的验证规则。你必须指定它们作为查询类构造函数的参数的一部分。

让我们在上述函数中添加一个名为 百分数 的查询参数,并应用验证规则为 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文档中反映如下:

FastAPI - 参数验证

虽然客户端可以使用GET方法向API服务器发送路径和查询参数,但我们需要应用POST方法来发送一些二进制数据作为HTTP请求的一部分。这个二进制数据可以是任何Python类的对象的形式。它构成了请求主体。FastAPI使用Pydantic库来实现这一目的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程