如何在Pydantic中校验传入字典的必填键 缺失时自动丢弃无效数据
解决方案
Pydantic 本身默认就会对所有无默认值的必填字段做全层级存在性校验,不管是顶层字段还是嵌套模型、列表内的嵌套模型,只要缺少任意必填字段,实例化时都会抛出ValidationError异常。你只要捕获该异常即可判定整条数据无效、直接丢弃。
以下是完整可运行的实现代码:
from typing import List from pydantic import BaseModel, ValidationError # 注:原示例中mail类名建议改为大写开头符合Python PEP8命名规范,不影响功能 class Mail(BaseModel): mailid: int email: str class User(BaseModel): id: int name: str mails: List[Mail] def validate_user_data(data: dict) -> bool | User: try: # 校验通过返回实例对象 return User(**data) except ValidationError: # 校验不通过返回False,代表整条数据丢弃 return False # 测试数据1 data1 = { 'id': 123, 'name': 'Jane Doe', 'mails':[ {'mailid':1,'email':'aeajhs@gmail.com'}, {'mailid':2,'email':'aeajhsds@gmail.com'} ] } result1 = validate_user_data(data1) print(result1) # 输出User实例,校验通过 # 测试数据2 data2 = { 'id': 123, 'name': 'Jane Doe', 'mails':[ {'mailid':1,'email':'aeajhs@gmail.com'}, {'email':'aeajhsds@gmail.com'} ] } result2 = validate_user_data(data2) print(result2) # 输出False,校验不通过,整条数据丢弃
补充说明:如果你使用的是Pydantic V2版本,上述逻辑完全兼容不需要修改。如果部分字段设置了默认值但你仍强制要求请求方传入,给对应字段加上Field(..., required=True)配置即可。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

