FastAPI-3-使用Pydantic声明请求体
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel # 用来声明请求体的库:1.提供运行时类型信息;2.返回友好错误提示
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None # 可选参数,不传参数时为None,如果有值则为bool
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item): # 路径中需要传item_id,请求体中传的参数符合Item模板
return {"item_name": item.name, "item_id": item_id}
回到前面的代码示例,FastAPI 将会:
- 校验
GET和PUT请求的路径中是否含有item_id。 - 校验
GET和PUT请求中的item_id是否为int类型。- 如果不是,客户端将会收到清晰有用的错误信息。
- 检查
GET请求中是否有命名为q的可选查询参数(比如http://127.0.0.1:8000/items/foo?q=somequery)。- 因为
q被声明为= None,所以它是可选的。 - 如果没有
None它将会是必需的 (如PUT例子中的请求体)。
- 因为
- 对于访问
/items/{item_id}的PUT请求,将请求体读取为 JSON 并:- 检查是否有必需属性
name并且值为str类型 。 - 检查是否有必需属性
price并且值为float类型。 - 检查是否有可选属性
is_offer, 如果有的话值应该为bool类型。 - 以上过程对于多层嵌套的 JSON 对象同样也会执行
- 检查是否有必需属性
- 自动对 JSON 进行转换或转换成 JSON。
- 通过 OpenAPI 文档来记录所有内容,可被用于:
- 交互式文档系统
- 许多编程语言的客户端代码自动生成系统
- 直接提供 2 种交互式文档 web 界面。

浙公网安备 33010602011771号