FastAPI 中如何定义 Pydantic 模型?

· 约 5 分钟读完 · 第 11 / 128 章

推荐答案

在 FastAPI 中,Pydantic 模型通常用于数据验证和序列化。你可以通过继承 pydantic.BaseModel 来定义一个 Pydantic 模型。以下是一个简单的示例:

在这个示例中,User 是一个 Pydantic 模型,它定义了四个字段:id、name、email 和 is_active。is_active 字段有一个默认值 True。

本题详细解读

1. Pydantic 模型的基本结构

Pydantic 模型是通过继承 pydantic.BaseModel 来定义的。每个字段都需要指定类型,并且可以包含默认值。例如:

在这个例子中,id、name 和 email 是必需的字段,而 is_active 是一个可选的字段,默认值为 True。

2. 字段类型和验证

Pydantic 支持多种字段类型,包括基本类型(如 int、str、bool)以及复杂类型(如 List、Dict、Optional 等)。Pydantic 会自动进行类型验证,如果输入的数据类型不匹配,会抛出 ValidationError。

例如:

在这个例子中,friends 是一个整数列表,address 是一个可选的字符串字段。

3. 嵌套模型

Pydantic 模型可以嵌套使用,允许你定义复杂的数据结构。例如:

在这个例子中,User 模型包含一个嵌套的 Address 模型。

4. 使用 Pydantic 模型进行数据验证

在 FastAPI 中,Pydantic 模型通常用于请求体和响应体的数据验证。例如:

在这个例子中,create_user 路由接受一个 User 类型的请求体,FastAPI 会自动验证请求体的数据是否符合 User 模型的定义。

5. 自定义验证器

Pydantic 允许你定义自定义验证器来执行更复杂的验证逻辑。例如:

在这个例子中,email_must_contain_at 是一个自定义验证器,用于确保 email 字段包含 @ 符号。

6. 序列化和反序列化

Pydantic 模型可以轻松地进行序列化和反序列化。你可以使用 model.dict() 将模型转换为字典,或者使用 model.json() 将模型转换为 JSON 字符串。例如:

输出结果为:

通过这些方法,你可以轻松地将 Pydantic 模型转换为适合存储或传输的格式。