我写了一个Pydantic模型来验证API的有效负载。
有效载荷有两个属性emailId
作为list
,role
作为str
{
"emailId": [],
"role":"Administrator"
}
我需要对属性email执行两次验证-
emailId
不能为空emailId
不能包含来自x, y, z域的邮件。
因此,为了实现这一点,我为emailId
编写了2个验证方法,如下所示-
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@validator("emailId")
def is_email_list_empty(cls, email):
if not email_id:
raise ValueError("Email list is empty.")
return email_id
@validator("emailId")
def valid_domains(cls, emailId):
pass
这里的问题是,如果emailId
列表为空,那么验证器不会立即raise
ValueError
。它等待所有的验证方法完成执行,这给我带来了一些严重的问题。
我有办法让它发生吗?
如果您有检查,其失败将中断进一步的验证,那么将它们放在pre=True
根验证器中。因为如果pre=True
根验证器引发错误,字段验证将不会发生。
例如:
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@root_validator(pre=True)
def root_validate(cls, values):
if not values['emailId']:
raise ValueError("Email list is empty.")
return values
@validator("emailId")
def valid_domains(cls, emailId):
return emailId