pydantic使用enum枚举类型

使用pydantic+enum校验字段

1.设置enum枚举值

from enum import Enum
from pydantic import BaseModel, NonNegativeInt


class Gender(Enum):
    """设置枚举类型及对应值"""
    women = 0
    men = 1

2.pydantic引用enum

class UserValid(BaseModel):
    """设置校验字段"""
    name: str
    age: NonNegativeInt
    remark: str = "暂无备注"
    gender: Gender  # 直接设置gender的校验类型为我们设置的枚举类

3.校验效果

  1. 传入正确的值
user = UserValid(name="songzi", age=18, gender=0)
print(user.name, user.age, user.remark, user.gender)

#打印结果
#songzi 18 暂无备注 Gender.women

我们可以看到,传入的是枚举值范围的,校验通过。但是值却是Gender.women。如果我们通过type查看user.gender 的话,会发现类型是<enum 'Gender'>,如果想要正确输入的值,可以在值后面加上.value获取正确的值。

user = UserValid(name="songzi", age=18, gender=0)
print(user.name, user.age, user.remark, user.gender.value)
print(type(user.gender.value))

#打印结果
#songzi 18 暂无备注 0
#<class 'int'>
  1. 传入错误值
    如果我们传入的值不是枚举值里面的,比如给gender传0、1之外的任何值,pydantic都会提示错误。
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for UserValid
gender
  value is not a valid enumeration member; permitted: 0, 1 (type=type_error.enum; enum_values=[<Gender.women: 0>, <Gender.men: 1>])

4. 总结

之所以我们不直接在pydantic里面直接设置int,是因为这样更方便。我们不但可以限制数字类型,还可以限制数字类型范围。另外还可以使用值去获取对应关系。

5.完整代码:

from enum import Enum
from pydantic import BaseModel, NonNegativeInt


class Gender(Enum):
    """设置枚举类型及对应值"""
    women = 0
    men = 1


class UserValid(BaseModel):
    """设置校验字段"""
    name: str
    age: NonNegativeInt
    remark: str = "暂无备注"
    gender: Gender  # 直接设置gender的校验类型为我们设置的枚举类


user = UserValid(name="songzi", age=18, gender=0)
print(user.name, user.age, user.remark, user.gender.value)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值