推荐答案
在 FastAPI 中,Pydantic 模型通常用于数据验证和序列化。你可以通过继承 pydantic.BaseModel
来定义一个 Pydantic 模型。以下是一个简单的示例:
from pydantic import BaseModel class User(BaseModel): id: int name: str email: str is_active: bool = True
在这个示例中,User
是一个 Pydantic 模型,它定义了四个字段:id
、name
、email
和 is_active
。is_active
字段有一个默认值 True
。
本题详细解读
1. Pydantic 模型的基本结构
Pydantic 模型是通过继承 pydantic.BaseModel
来定义的。每个字段都需要指定类型,并且可以包含默认值。例如:
class User(BaseModel): id: int name: str email: str is_active: bool = True
在这个例子中,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 字符串。例如:
user = User(id=1, name="John Doe", email="john@example.com") print(user.dict()) print(user.json())
输出结果为:
{'id': 1, 'name': 'John Doe', 'email': 'john@example.com', 'is_active': True} '{"id": 1, "name": "John Doe", "email": "john@example.com", "is_active": true}'
通过这些方法,你可以轻松地将 Pydantic 模型转换为适合存储或传输的格式。