
pydantic 库 validator 的 per 参数问题
问题:
pydantic 库 validator 的 per 参数应控制验证方法的执行顺序,但在我将某个 validator 装饰的方法的 per 参数设置为 true 之后,其执行顺序并非第一位。求解惑。
代码示例:
from pydantic import BaseModel, ValidationError, validator
class UserModel(BaseModel):
name: str
username: str
password1:str
password2: str
@validator('name')
def name_must_contain_space(cls, v,values):
print(values,'name')
if ' ' not in v:
raise ValueError('must contain a space')
return v.title()
@validator('password2')
def passwords_match(cls, v, values):
print(values,'password2')
if 'password1' in values and v != values['password1']:
raise ValueError('passwords do not match')
return v
@validator('username',pre=True)
def username_alphanumeric(cls, v,values):
print(values,'执行顺序优先')
assert v.isalnum(), 'must be alphanumeric'
return v
user = UserModel(
name='samuel colvin',
username='scolvin',
password1='zxcvbn',
password2='zxcvbn',
)答案:
文档中确实说明了 per 参数用于设置 validator 验证方法执行顺序。根据官方示例,应将 @validator('username', pre=true) 放在校验定义的起始位置。
为了解决此问题,可以尝试调换 validator 的顺序,或在 github 上提 issue:https://github.com/pydantic/pydantic/blob/main/tests/test_validators.py
以上就是Pydantic 库 validator 中 per 参数的执行顺序问题:为什么将 per 设置为 True 后,验证方法的执行顺序并非第一位?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号