如何在 Pydantic 中创建多个约束类型
How to create multiple constrained types in Pydantic
我正在尝试对秘密字符串施加约束。例如,如果可以的话,我想要这样的东西:
from pydantic import constr, SecretStr
class SimpleModel(BaseModel):
password: (SecretStr, constr(min_length=8, max_length=32))
如果有可能做到这一点,我的下一个问题是:我还可以添加一个需要非单词字符的约束吗?我可以自己进行正则表达式检查,但我正在尝试更充分地采用 pydantic
。
目前 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
我正在尝试对秘密字符串施加约束。例如,如果可以的话,我想要这样的东西:
from pydantic import constr, SecretStr
class SimpleModel(BaseModel):
password: (SecretStr, constr(min_length=8, max_length=32))
如果有可能做到这一点,我的下一个问题是:我还可以添加一个需要非单词字符的约束吗?我可以自己进行正则表达式检查,但我正在尝试更充分地采用 pydantic
。
目前 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