#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