如何使用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())

代码质量更好。组模型中一个可能的错误:

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'的验证测试,因为name包含一个数字。如果您更改了它,它将通过验证。

同时,你必须把赋值部分放在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/错误处理

那里有许多写得很好的例子。你进步很大。

Pydantic简化了验证。如果您只需要一些简单的验证逻辑,则不需要使用它。但是在大多数现实世界的项目中使用它会更好,因为我们需要在许多数据类和位置进行大量验证。

最新更新