推荐答案
在 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。
例如:
// www.javascriptcn.com code example
from typing import List, Optional
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
friends: List[int] = []
address: Optional[str] = None在这个例子中,friends 是一个整数列表,address 是一个可选的字符串字段。
3. 嵌套模型
Pydantic 模型可以嵌套使用,允许你定义复杂的数据结构。例如:
// www.javascriptcn.com code example
class Address(BaseModel):
street: str
city: str
state: str
zip_code: str
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
address: Address在这个例子中,User 模型包含一个嵌套的 Address 模型。
4. 使用 Pydantic 模型进行数据验证
在 FastAPI 中,Pydantic 模型通常用于请求体和响应体的数据验证。例如:
// www.javascriptcn.com code example
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
@app.post("/users/")
async def create_user(user: User):
return user在这个例子中,create_user 路由接受一个 User 类型的请求体,FastAPI 会自动验证请求体的数据是否符合 User 模型的定义。
5. 自定义验证器
Pydantic 允许你定义自定义验证器来执行更复杂的验证逻辑。例如:
// www.javascriptcn.com code example
from pydantic import BaseModel, validator
class User(BaseModel):
id: int
name: str
email: str
is_active: bool = True
@validator('email')
def email_must_contain_at(cls, v):
if '@' not in v:
raise ValueError('email must contain @')
return v在这个例子中,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 模型转换为适合存储或传输的格式。