Skip to content

发送数据: 请求体与 Pydantic

当您需要将数据从客户端(如浏览器)发送到您的 API 时,通常以**请求体(Request Body)**的形式发送。最常见的格式是 JSON。要在 FastAPI 中声明请求体,您需要使用 Pydantic 模型。

Pydantic 是一个库,它允许您使用 Python 类定义数据的“形状”或模式(schema)。您定义一个继承自 BaseModel 的类,并使用标准 Python 类型声明属性。

from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
is_offer: bool = False
app = FastAPI()

在这个 Item 模型中:

  • name 和 price 是必需的(没有默认值)。
  • description 是可选的,默认为 None。
  • is_offer 是可选的,默认为 False。

要在您的 API 中接收此数据,请在路径操作函数中将其声明为参数,并使用 Pydantic 模型类作为类型提示(type hint)。

@app.post("/items/")
def create_item(item: Item):
# FastAPI 将 JSON 请求体转换为一个 'item' 对象
return item

当用户向 /items/ 发送 POST 请求时,FastAPI 将自动执行以下操作:

  1. 将请求体读取为 JSON。
  2. 转换相应的数据类型(如果需要)。
  3. 根据 Item 模型验证数据。
  4. 将数据作为 item 参数提供给函数。您甚至可以在函数内部获得 item.name 等属性的代码补全!

如果客户端发送了无效数据——例如,为 price 字段发送字符串 “twenty”(该字段期望一个浮点数)——FastAPI 将自动返回一个 422 Unprocessable Entity 错误。

响应体将包含清晰的 JSON 指示,精确说明出了什么问题以及在哪里出问题,从而帮助客户端修复其请求,而无需您编写自定义验证逻辑。