如何在Pydantic中创建多个受约束类型

2024-04-25 16:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对一个秘密字符串进行约束。例如,如果我可以,我想要这样的东西:

from pydantic import constr, SecretStr

class SimpleModel(BaseModel):
    password: (SecretStr, constr(min_length=8, max_length=32))

如果有可能做到这一点,我的下一个问题是:我是否可以添加一个约束条件,即需要非单词字符?我可以自己做正则表达式检查,但我正在尝试更充分地采用pydantic


Tags: 字符串fromimportpasswordminlengthmaxclass
1条回答
网友
1楼 · 发布于 2024-04-25 16:41:22

目前SecretStr不可能做到这一点。在提交PR之前,您可以使用验证器实现相同的行为:

import re
from pydantic import AnyStrMinLengthError, AnyStrMaxLengthError, BaseModel, SecretStr, StrRegexError, validator

class SimpleModel(BaseModel):
    password: SecretStr

    @validator('password')
    def has_min_length(cls, v):
        min_length = 8
        if len(v.get_secret_value()) < min_length:
            raise AnyStrMinLengthError(limit_value=min_length)
        return v

    @validator('password')
    def has_max_length(cls, v):
        max_length = 32
        if len(v.get_secret_value()) > max_length:
            raise AnyStrMaxLengthError(limit_value=max_length)
        return v

    @validator('password')
    def matches_regex(cls, v):
        regex = r'.*\W'
        if not re.match(regex, v.get_secret_value()):
            raise StrRegexError(pattern=regex)
        return v

相关问题 更多 >