Skip to main content

对 Morepath 的 JSON 模式支持

项目描述

more.jsonschema:对 Morepath 的 JSON 模式支持

这个包为JSON Schema提供了 Morepath 集成,用jsonschema实现:

JSON Schema 可以在 HTTP API 中自动验证用户输入。

架构

JSON 模式需要加载到 Python 字典中(您可以使用json.load()):

user_schema = {
    'type': 'object',
    'properties': {
        'name': {
            'type': 'string',
            'minLength': 3
        },
        'age': {
            'type': 'integer',
            'minimum': 10
        }
    },
    'required': ['name', 'age']
}

如果你想在 Python 中定义 JSON 模式,你可以使用jsl例如。

证实

more.jsonschema集成有助于在将请求主体发布到视图时对其进行验证首先我们必须为我们的模式创建一个加载器:

from more.jsonschema import loader

user_schema_load = loader(user_schema)

我们可以使用这个加载器来处理一个 POST 请求,例如:

@App.json(model=User, request_method='POST', load=user_schema_load)
def user_post(self, request, json):
    # json is now a validated and normalized dict of whatever got
    # POST onto this view that you can use to update
    # self

自定义验证器

默认情况下more.jsonschema使用Draft7Validator。但您也可以使用Draft3ValidatorDraft4ValidatorDraft6Validator。您甚至可以创建自己的验证器或扩展现有的验证器。只需将 Validator 传递给loader

from jsonschema import Draft4Validator
from more.jsonschema import loader

  user_schema_load = loader(user_schema, validator=Draft4Validator)

有关创建或扩展验证器类的更多信息,您可以在jsonschema 文档中找到。

错误处理

如果验证因验证错误而失败(例如,缺少必填字段,或者字段的数据类型错误),您希望显示某种错误消息。more.jsonschema创建的load函数在 出错时会引发more.jsonschema.ValidationError异常。

此异常对象具有带有验证错误的错误属性。您必须为其定义一个异常视图,否则验证错误将作为“500 内部服务器错误”返回给 API 用户。

这个包提供了一个默认的异常视图实现。如果您从more.jsonschema.JsonSchemaApp子类化您的应用程序,那么您将获得ValidationError的默认错误视图,该视图具有 422 状态代码和错误消息:

from more.jsonschema import JsonSchemaApp

class App(JsonSchemaApp):
    pass

现在您的应用程序内置了合理的错误处理。

变化

0.2 (2020-04-26)

  • 已删除:删除了对 Python 2 和 Python 3.4 和 3.5 的支持。

    如果你想使用这个版本,你必须升级到 Python 3。

  • 添加了对 Python 3.6、3.7 和 3.8 以及 PyPy 3.6 的支持。

  • 将 Python 3.7 设为默认测试环境。

  • 将 jsonschema 升级到 3.2.0 版本。

  • 将 JSON Schema Draft 7 设为默认验证器。

  • 添加黑色代码格式化程序的集成。

0.1 (2017-03-17)

  • 首次公开发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

more.jsonschema-0.2.tar.gz (6.1 kB 查看哈希

已上传 source

内置分布

more.jsonschema-0.2-py2.py3-none-any.whl (6.8 kB 查看哈希

已上传 py2 py3