Pydantic系列之Type

字段类型

一些额外的类型

类型说明
typing.Any任何类型,包括None
typing.TypeVar泛型
typing.OptionalOptional[T]相当于Union[T,None]
typing.TypedDict相当于dict,key的种类固定,value必须是指定的类型
相当于对key,value进行校验
typing.Queue, typing.Deque, typing.FrozenSet一些集合类型
typing.Pattern正则表达式
ipaddress模块中的一些类型网络ip地址等
enum及其子类枚举
pathlib.Path路径
uuid.UUIDuuid
pydantic.ByteSize存储单位转化,ByteSize(1024)相当于1.0KiB
typing.Literal字面量,Python3.8在typing_extensions模块中

各类型说明

pydantic会对类型做自动转换,无法识别的值或转换失败会抛出ValidationError。

bool

  • True, False
  • 1, 1, ‘0’, ‘off’, ‘f’, ‘false’, ‘n’, ‘no’, ‘1’, ‘on’, ‘t’, ‘true’, ‘y’, ‘yes’
  • 解码后是上述字符串的bytes类型

Bytes和ByteSize

  • bytes
    bytes,bytearray会调用bytes(v),str会调用v.encode。
  • SecretBytes
    同bytes,部分加密,输出的时候有*掩码处理。
  • ByteSize
    将带单位的容量大小转华为数字,如1KB转化为1024
  • conbytes
    返回带有约束检查的bytes类型
    import annotated_types
    from typing_extensions import Annotated
    
    from pydantic import BaseModel, Strict
    
    
    class MyModel(BaseModel):
        # Instead of `my_bytes: conbytes(strict=True, min_length=10, max_length=20)`, use:
        my_bytes: Annotated[bytes, Strict(), annotated_types.Len(10, 20)]
    

Callable

只验证其是否可调用,不对参数、返回值进行检查

datetimes

支持以下四种类型

  • datetime.datetime
    支持以下值
    • datetime对象
    • int或者float或者字符串时间戳,当成Unix时间戳处理,在 − 2 10 -2^{10} 210 2 10 2^{10} 210视为秒数,否则视为毫秒数。
    • 格式化字符串,格式为YYYY-MM-DD[T]HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
  • datetime.date
    • date对象
    • int,float或者字符串时间戳,处理方法同datetime
    • 格式化字符串,YYYY-MM-DD
  • datetime.time
    • time对象
    • 格式化字符串,HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
  • datetime.timedelta
    • timedelta对象
    • int或者float,视为秒数
    • 格式化字符串,[-][DD ][HH:MM]SS[.ffffff],[±]P[DD]DT[HH]H[MM]M[SS]S (ISO 8601 format for timedelta)

pydantic扩展时间类型

增加了额外的时间校验

  • PastDate,datetime.date,但必须是过去的日期
  • FurtureDate,未来的date
  • PastDatetime,过去的datetime
  • FurtureDatetime,未来的datetime
  • AwareDatetime,带时区的时间
  • NaiveDatetime,不带时区的时间

Encoded

需要自定义编解码器,见pydantic文档

  • EncodedBytes,自定义编解码的bytes
  • EncodedStr,自定义编解码的str

File Types

  • FilePath
    pydantic扩展类型,相当于pathlib.path,但是必须是文件且路径必须存在。
  • DirectoryPath
    pydantic扩展类型,相当于pathlib.path,但是必须是目录且路径必须存在。

JSON

泛型类型,Json[List[int]]会将字符串 ‘[1,2,3,4]’ 转化为列表。

Number Type

除了基本的int,float,decimal之外,还有IntEnum,带约束的conint,confloat,condecimal,PositiveInt,NegtiveInt,NonPositiveInt,NonnegtiveInt等。

Secret

敏感信息保护,打印或者序列化的结果带*号或者为空串。有SecretStr和SecretBytes两种类型。

String Types

  • str,基本字符串类型
  • EmailStr,邮箱格式
  • NamedEmail,Fred Bloggs fred.bloggs@example.com,name是Fred Bloggs。
  • constr,字符串约束,大小写,空白等
  • ImportString,合法的python模块字符串且可导入成功,如math.cos,math:sin。

Type和TypeVar

类型,Type[T]表示T的class类型,T表示T的对象类型

Union

Discriminated Unions,对特定的类型进行校验,文档

URL

  • AnyUrl,任何协议,不需要顶级域名,需要主机名
  • AnyHttpUrl,http或者https协议, 不需要顶级域名, 需要主机名
  • HttpUrl,http或者https协议, 需要顶级域名, 需要主机名,最大长度2083
  • FileUrl,file协议,不需要主机名
  • PostgresDsn,MySQLDsn等,数据库连接url。
  • IPvAnyAddress、IPvAnyInterface,IPvAnyNetwork。

Extra Types

类型转换表

https://docs.pydantic.dev/latest/usage/conversion_table/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值