Как проверить записи с помощью валидатора Pydantic?

#python #validation #pydantic

Вопрос:

Я новичок в pydantic. Каковы некоторые методы, которые я могу использовать в Pydantic для очистки моих данных, и как правильно их проверять? Не могли бы вы, пожалуйста, просмотреть мой код и выявить какие-либо ошибки в моем коде?

 from pydantic import BaseModel
from datetime import datetime
from typing import List, Optional
from pydantic import ValidationError, validator
import json

class UserModel(BaseModel):
    name: str
    age: int
    streetadr: str

    @validator('name')
    def name_must_contain_space(cls, v):
         names = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', " "]
         for x in v:
            if x not in names:
              raise ValueError('must contain letters')
         return v.title()

    @validator('age')
    def age_digits(cls, v):
        if not (int(v)):
            raise AttributeError("Must be a int")
        return v
    
    @validator('streetadr')
    def street_address(cls, v):
        if '' not in v and not v.isalnum():
            raise ValueError("Must be Alphanumric")
        return v 
class GroupModel(BaseModel):
    users: UserModel

u = GroupModel(users={'name':"james Wash", 'age':"23", 'streetadr':'2333 Sabrina Dr'})
print(u.json())
 

Комментарии:

1. Я ответил ниже. Также посмотрите на примеры, приведенные по адресу: pydantic-docs.helpmanual.io/usage/models/#recursive-orm-models

2. Этот код выглядит намного лучше, чем в прошлый раз. Хороший прогресс.

Ответ №1:

качество кода лучше. Одна возможная ошибка в групповой модели:

 class GroupModel(BaseModel):
    users: UserModel
 

должно быть

 class GroupModel(BaseModel):
    users: List[UserModel]

 

Затем для простоты я переписал следующий раздел.

 a = {'name':"james1 Wash", 'age':"23", 'streetadr':'2333 Sabrina Dr'}
b = {'name':"hh axx", 'age':"32", 'streetadr':'2333 Dr'}

u = GroupModel(users=[a, b])
 

Это не пройдет проверку на валидацию для var «a», так как имя содержит число.
Если вы измените это, оно пройдет проверку.

Кроме того, вы должны поместить часть назначения в блок try.

 try:
    u = GroupModel(users=[a, b])
except ValidationError as e:
    print(e) #to see details of error. Print only if you need to see it.
 

Изучите обработку ошибок, предоставленную в pydantic.
https://pydantic-docs.helpmanual.io/usage/models/#error-handling

Там приведено много хорошо написанных примеров. Вы делаете хороший прогресс.

Pydantic упрощает проверку. Вам не нужно использовать его, если вам просто нужна простая логика проверки. Но лучше использовать его в большинстве проектов реального мира, если бы нам требовалось много проверок во многих классах данных и местоположениях.

Комментарии:

1. По ссылке уже приведены хорошие примеры: pydantic-docs.helpmanual.io/usage/models/#recursive-orm-models