pydantic学习与使用-6.dataclasses 验证器

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pydantic学习与使用-6.dataclasses 验证器相关的知识,希望对你有一定的参考价值。

前言

validator 验证器也可以应用于 pydantic dataclasses.

pydantic dataclasses

pydantic 里面的 dataclassesdata 是 dataclasses.dataclass 和 validation 的结合。

from datetime import datetime

from pydantic import validator
from pydantic.dataclasses import dataclass


@dataclass
class DemoDataclass:
    ts: datetime = None

    @validator('ts', pre=True, always=True)
    def set_ts_now(cls, v):
        return v or datetime.now()


print(DemoDataclass())
# > DemoDataclass(ts=datetime.datetime(2021, 12, 31, 15, 4, 57, 631059))
print(DemoDataclass(ts='2017-11-08T14:00'))
# > DemoDataclass(ts=datetime.datetime(2017, 11, 8, 14, 0))

使用示例

validator 验证同样适用pre 和 each_item 验证器

from pydantic import validator
from pydantic.dataclasses import dataclass
from typing import List


@dataclass
class User(object):
    name: str
    age: int
    friends: List[int]

    @validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('must contain a space')
        return v

    @validator('age')
    def check_age(cls, v):
        if v < 18:
            raise ValueError('age less then 18')
        return v

    @validator('friends', each_item=True)
    def check_friends(cls, v):
        assert v >= 2, f'v is not greater then 2'
        return v


user = User(name='yo yo',
            age=20,
            friends=[2, 3, 4])
print(user) # User(name='yo yo', age=20, friends=[2, 3, 4])
print(user.name)   # yo yo
print(user.age)    # 20
print(user.friends)   # [2, 3, 4]

以上是关于pydantic学习与使用-6.dataclasses 验证器的主要内容,如果未能解决你的问题,请参考以下文章

pydantic学习与使用-2.基本模型(BaseModel)使用

pydantic学习与使用-6.dataclasses 验证器

pydantic学习与使用-9.枚举类型(enum)

pydantic学习与使用-13.Field 定制字段使用别名alias

pydantic学习与使用-13.Field 定制字段使用别名alias

pydantic学习与使用-10.日期时间类型(datetime)