- FastAPI 教程
- FastAPI - 首页
- FastAPI - 简介
- FastAPI - Hello World
- FastAPI - OpenAPI
- FastAPI - Uvicorn
- FastAPI - 类型提示
- FastAPI - IDE 支持
- FastAPI - REST 架构
- FastAPI - 路径参数
- FastAPI - 查询参数
- FastAPI - 参数验证
- FastAPI - Pydantic
- FastAPI - 请求体
- FastAPI - 模板
- FastAPI - 静态文件
- FastAPI - HTML 表单模板
- FastAPI - 访问表单数据
- FastAPI - 上传文件
- FastAPI - Cookie 参数
- FastAPI - 头部参数
- FastAPI - 响应模型
- FastAPI - 嵌套模型
- FastAPI - 依赖项
- FastAPI - CORS
- FastAPI - CRUD 操作
- FastAPI - SQL 数据库
- FastAPI - 使用 MongoDB
- FastAPI - 使用 GraphQL
- FastAPI - Websockets
- FastAPI - FastAPI 事件处理器
- FastAPI - 挂载子应用
- FastAPI - 中间件
- FastAPI - 挂载 Flask 应用
- FastAPI - 部署
- FastAPI 有用资源
- FastAPI - 快速指南
- FastAPI - 有用资源
- FastAPI - 讨论
FastAPI - 参数验证
可以对 URL 的路径参数和查询参数应用验证条件。为了对路径参数应用验证条件,需要导入 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 的参数,例如 (https://127.0.0.1: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 - 小于或等于
让我们修改上述操作装饰器,将 age 作为路径参数并应用验证。
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 为 https://127.0.0.1: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 为 https://127.0.0.1:8000/hello/Ravi/20?percent=79,则浏览器将显示以下 JSON 响应:
{"name":"Ravi","age":20}
FastAPI 正确地识别了 percent 为应用了验证条件的查询参数。它在 OpenAPI 文档中反映如下:
虽然客户端可以使用 GET 方法将路径和查询参数发送到 API 服务器,但我们需要应用 POST 方法才能将一些二进制数据作为 HTTP 请求的一部分发送。此二进制数据可以是任何 Python 类的对象形式。它构成请求体。FastAPI 使用 Pydantic 库来实现此目的。