pydantic驗證器Validator



title: pydantic驗證器Validator
date: 2020-01-17T01:20:38.127Z
tags: python,pydantic
categories: python

最近學習Python的fastapi框架,發現使用了pydantic來做輸入參數。看了一下pydantic的文檔,發現也可以用來做驗證器。
一開始用的挺好,后來碰到一個多字段聯合驗證的情況,在文檔里翻了一下,發現可以這么用,

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):
        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

    @validator('username')
    def username_alphanumeric(cls, v):
        assert v.isalpha(), 'must be alphanumeric'
        return v

print(UserModel(name='samuel colvin', username='scolvin', password1='zxcvbn',
                password2='zxcvbn'))
#> name='Samuel Colvin' username='scolvin' password1='zxcvbn' password2='zxcvbn'

try:
    UserModel(name='samuel', username='scolvin', password1='zxcvbn',
              password2='zxcvbn2')
except ValidationError as e:
    print(e)
"""
2 validation errors for UserModel
name
  must contain a space (type=value_error)
password2
  passwords do not match (type=value_error)
"""

於是動手試了一下,結果卻失敗了。經過一番調試,發現,這個values,並不是所有的輸入參數,只有驗證通過的才有,並且不包括當前的參數,當前參數從v取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM