Pydantic:校验器(@validator)、模型嵌套、模型继承

1. 校验器(@validator)

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
  • 你可以抛出异常来阻止非法数据。
  • 你也可以对值做一些小改动(比如格式化字符串)。

2. 模型嵌套(Model Nesting)

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 会自动转成子模型。

️ 3. 模型继承(Model Inheritance)

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 用来自定义字段验证,模型嵌套用来组合结构复杂的数据,模型继承用来复用字段和逻辑。

你可能感兴趣的:(前端,javascript,开发语言)