Pydantic 允许你自定义字段验证逻辑。用 @validator
装饰器可以在字段赋值时自动进行检查或修改。
例子:
from pydantic import BaseModel, validator
class User(BaseModel):
name: str
age: int
@validator('name')
def name_must_not_be_empty(cls, v):
if not v.strip():
raise ValueError('Name must not be empty')
return v.title() # 自动转为首字母大写
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('Age must be positive')
return v
用法说明:
@validator('字段名')
作用于特定字段。cls
(类本身),第二个是字段值 v
。Pydantic 支持模型里嵌套模型,非常适合表示复杂的数据结构。
例子:
from pydantic import BaseModel
class Address(BaseModel):
city: str
zip_code: str
class User(BaseModel):
name: str
address: Address
user = User(
name='Tom',
address={
'city': 'New York',
'zip_code': '10001'
}
)
print(user.address.city) # 自动解析成 Address 类型
用法说明:
BaseModel
子类。Pydantic 的模型支持继承,就像 Python 的普通类一样。
你可以用基类定义通用字段,然后子类扩展或修改。
例子:
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
class Employee(Person):
employee_id: str
class Manager(Employee):
department: str
m = Manager(name='Alice', age=30, employee_id='E123', department='HR')
print(m)
用法说明:
@validator 用来自定义字段验证,模型嵌套用来组合结构复杂的数据,模型继承用来复用字段和逻辑。