如何使用 pydantic 生成严格的 json 模式?

sor*_*rin 3 python jsonschema pydantic

我最近开始使用 pydandic 生成用于验证数据的 JSON 模式,但我发现默认情况下生成的模式不会抱怨我的 BaseModel 中的未知键。

例子:

class Query(BaseModel):
    id: str
    name: Optional[str]
Run Code Online (Sandbox Code Playgroud)

即使对象具有这里提到的两个属性之外的其他属性,生成的模式也会通过验证。

如果有人添加了“foo:bar”属性,我如何确保验证会失败?

jua*_*aga 6

您需要在模型上使用配置:

from pydantic import BaseModel, Extra
class Query(BaseModel):
    id: str
    name: Optional[str]
    class Config:
        extra = Extra.forbid
Run Code Online (Sandbox Code Playgroud)

它默认为Extra.ignore,另一个选项是Extra.allow向结果对象添加任何额外的字段。

您也可以只使用字符串"ignore", "allow", 或"forbid"

以下是您可以使用的所有模型配置选项:

https://pydantic-docs.helpmanual.io/usage/model_config/