Rah*_*hul 6 python pydantic fastapi
class mail(BaseModel):
mailid: int
email: str
class User(BaseModel):
id: int
name: str
mails: List[mail]
data1 = {
'id': 123,
'name': 'Jane Doe',
'mails':[
{'mailid':1,'email':'aeajhs@gmail.com'},
{'mailid':2,'email':'aeajhsds@gmail.com'}
]
}
userobj = User(**data1) # Accepted
data2 = {
'id': 123,
'name': 'Jane Doe',
'mails':[
{'mailid':1,'email':'aeajhs@gmail.com'},
{'email':'aeajhsds@gmail.com'}
]
}
userobj = User(**data2) # Discarded or not accepted
Run Code Online (Sandbox Code Playgroud)
我想检查我们传递给 pydantic 模型的字典中的键,因此如果给定字典中不存在该键,我想丢弃该数据。例如在邮件中的data2中,{'email':'aeajhsds@gmail.com'}
data2必须被丢弃
小智 5
您可以pydantic.validator
按照@juanpa-arrivilillaga 所说使用。
有几个小技巧:
Optional
验证结束时它可能为空。pre=True
是否应在标准验证器之前调用此验证器(否则在之后)from pydantic import BaseModel, validator
from typing import List, Optional
class Mail(BaseModel):
mailid: int
email: str
class User(BaseModel):
id: int
name: str
mails: Optional[List[Mail]]
@validator('mails', pre=True)
def mail_check(cls, v):
mail_att = [i for i in Mail.__fields__.keys()]
mail_att_count = 0
for i, x in enumerate(v):
for k in dict(x).keys():
if k in mail_att:
mail_att_count += 1
if mail_att_count != len(mail_att):
v.pop(i)
mail_att_count = 0
return v
Run Code Online (Sandbox Code Playgroud)
data = {
'id': 123,
'name': 'Jane Doe',
'mails':[
{'mailid':1,'email':'aaa@gmail.com'},
{'mailid':2,'email':'bbb@gmail.com'},
{'email':'ccc@gmail.com'}
]
}
x = User(**data) # Discarded or not accepted
print(x.id)
print(x.name)
print(x.mails)
# Output
# >>123
# >>Jane Doe
# >>[Mail(mailid=1, email='aaa@gmail.com'), Mail(mailid=2, email='bbb@gmail.com')]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25841 次 |
最近记录: |