路径参数和查询参数像门牌号、备注栏。 真正复杂的数据,通常放在请求体里。
FastAPI 官方推荐用 Pydantic BaseModel 来声明请求体:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class PermitCreate(BaseModel):
owner: str
zone: str
days: int
note: str | None = None
@app.post("/permits/")
async def create_permit(data: PermitCreate):
return {
"message": "申请已受理",
"owner": data.owner,
"zone": data.zone,
"days": data.days,
}这时候 FastAPI 会自动做几件事:
收到 JSON
│
▼
按 PermitCreate 解析
│
├── 类型转换
├── 数据校验
├── 错误定位
└── 生成文档 Schema
▼
把合格数据作为 data 传给你也就是说,data 不再是乱糟糟的 dict,而是一个结构明确的对象。