Pydantic验证报错None不被允许,Flask接口接收Spotify艺人数据失败
问题原因分析
1. Pydantic序列化时默认保留None值,导致请求JSON含null字段
你用artist.dict()把模型转成字典时,Pydantic默认会把所有字段(包括值为None的)都保留下来。比如如果artist.followers是None,最终请求的JSON里就会出现"followers": null;如果followers实例存在但href是None,则会有"followers": {"href": null}。
而你的Flask接口通过@validate()做校验时,对应的校验规则(不管是用了单独的校验模型还是其他校验库)可能没配置允许这些字段为null——哪怕你在构造模型时加了Optional,只要校验逻辑没同步适配,就会触发“none is not an allowed value”的错误。
2. 接口校验模型与构造实例的模型不一致
如果你的Flask接口端用了独立的Pydantic模型来校验请求体,却没有同步设置:
followers为Optional[Followers]- 或者
Followers模型里的href为Optional[str]
那校验时自然会拒绝null值,引发错误。
3. 非Pydantic校验器不识别Optional声明
如果你的@validate()用的是WTForms、Flask-Inputs这类非Pydantic的校验库,它们根本不认识Pydantic的Optional声明。这类库的字段默认要求非空,哪怕你在模型里允许None,校验器还是会直接拒绝null值。
快速解决思路
你可以改用artist.dict(exclude_none=True)来序列化模型,这样所有值为None的字段都会被自动排除,不会出现在请求JSON里。如果接口允许这些字段缺省,就能绕过null值的校验问题。
内容的提问来源于stack exchange,提问作者error404
相关产品推荐
相关产品推荐

