簡體   English   中英

如何使用 Pydantic 驗證器驗證條目?

[英]How to validate entries using Pydantic validator?

我是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/#error-handling

那里給出了許多寫得很好的例子。 你正在取得良好的進展。

Pydantic 簡化了驗證。 如果您只需要一些簡單的驗證邏輯,則不需要使用它。 但是最好在大多數現實世界的項目中使用它,因為我們需要在許多數據類和位置進行大量驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM