546 字
1 分钟
FastAPIfastapi
FastAPI 请求体:Pydantic 模型、多参数与嵌套结构
当输入不再只是 URL 参数,而是一整个 JSON 请求体时,FastAPI 如何借助 Pydantic 做解析、校验、嵌套和文档生成。
从这一篇开始,输入不再只是 URL 上的几个值,而是成块的数据结构。FastAPI 的优势也从这里开始明显:不是自己手写 JSON 解析,而是直接把结构声明成模型。
1. 用 Pydantic 模型声明请求体
Python3
点击展开代码
展开代码
这里的关键不是"能收到 JSON",而是:
- FastAPI 会把请求体按
Item模型解析 - Pydantic 会自动校验字段类型
- 文档会自动生成 schema
- 校验错误会定位到具体字段
2. 路径参数、查询参数、请求体可以一起出现
Python3
点击展开代码
展开代码
这里已经把三类最核心的输入组合起来了:
item_id:路径参数q:查询参数item:请求体
后面很多复杂接口,本质上还是这三层输入的组合。
3. 多个请求体参数
Python3
点击展开代码
展开代码
这时 FastAPI 期望请求体长成:
{ "item": { "name": "Foo", "description": "The pretender", "price": 42.0, "tax": 3.2 }, "user": { "username": "dave", "full_name": "Dave Grohl" }}4. 简单类型如果想放进 Body,需要显式声明
Python3
点击展开代码
展开代码
这里有个很关键的规则:
- Pydantic 模型默认会被当成请求体
- 简单类型如果不额外声明,默认会被当成查询参数
所以 Body() 不只是补校验,它还在明确参数来源。
5. 嵌套模型
Python3
点击展开代码
展开代码
这里顺手也能看到 Pydantic 提供的几个常用能力:
HttpUrl:校验 URLset[str]:自动去重list[Image]:子模型列表
6. 给请求体补示例和文档信息
模型不仅负责校验,还会直接影响 /docs 里的展示效果。
可以在模型里写:
Python3
点击展开代码
展开代码
也可以在 Body() 里写 openapi_examples,这样能给同一个接口准备多个示例场景。
7. 请求体这一层真正带来的变化
到了这里,FastAPI 的体验已经开始和"手写 Flask 风格的 JSON 解析"拉开差距了。
你写的不是"接收一个 dict 再自己判空",而是:
- 先把数据结构声明出来
- 再让框架负责解析
- 再让文档跟着模型自动长出来
这也是为什么后面学响应模型、依赖注入和安全时,Pydantic 一直会反复出现。
专题阅读
FastAPI
这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。
当前进度4 / 11
01
FastAPI 学习路线图:把教程式切分重新排成一条主线
更新于 2026-04-03
02FastAPI 起步:应用入口、fastapi dev、entrypoint 与 uvicorn
更新于 2026-04-02
03FastAPI 输入基础:路径参数与查询参数
更新于 2026-04-01
04FastAPI 请求体:Pydantic 模型、多参数与嵌套结构
更新于 2026-03-31
当前
05FastAPI 参数校验:Query、Path、Body、Cookie、Header
更新于 2026-03-30
06FastAPI 输出层:响应模型、状态码与数据更新
更新于 2026-03-29
07FastAPI 请求编码切换:表单、文件上传与 UploadFile
更新于 2026-03-28
08FastAPI 组织逻辑:Depends、yield、错误处理与安全起步
更新于 2026-03-27
09FastAPI Bigger Applications:APIRouter、多文件应用与生命周期
更新于 2026-03-26
10FastAPI 扩展层:中间件、CORS 与后台任务
更新于 2026-03-25
11FastAPI 验证与运行:Testing、CLI、Uvicorn 与 Workers
更新于 2026-03-24
部分信息可能已经过时
留言区
留言
欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。