验证器方法需要检查必需的参数吗?

时间:2019-08-10 02:06:09

标签: fastapi pydantic

docs看来,此代码在validator中第二个password1装饰的values方法中包含一个额外的检查。

我在这种观察中是否正确-因为password1不包含默认值,因此确实需要它,所以应该存在吗?

from pydantic import BaseModel, ValidationError, validator

class UserModel(BaseModel):
    name: str
    password1: str
    password2: str

    @validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('must contain a space')
        return v.title()

    @validator('password2')
    def passwords_match(cls, v, values, **kwargs):
        if 'password1' in values and v != values['password1']:
            raise ValueError('passwords do not match')
        return v

好,请继续阅读文档,我会看到:如果对另一个字段进行验证失败(或缺少该字段),则不会将其包含在值中,因此,如果值中的'password1'和...例子。

我可以看一下这意味着什么的例子吗?这是否意味着即使值是必需的,如果它们在我的验证中起某些作用,我也需要始终检查它们是否存在?

1 个答案:

答案 0 :(得分:1)

  

我可以看一下这意味着什么的例子吗?这是否意味着即使值是必需的,如果它们在我的验证中发挥了作用,我也需要始终检查它们是否存在?

是的,如果您使用的是前面的字段,则始终需要考虑到values中可能缺少该字段。这是因为,即使较早的字段出现错误(包括缺少的必填字段),也会始终调用验证程序。

  

还-不清楚为什么在方法中返回v.title()而不是v?返回的目的是什么?

更改了值,使samuel变为Samuel,这是为了表明验证者可以修改值以及引发错误。