跳转到主要内容

Morepath的JSON Schema支持

项目描述

more.jsonschema: 为Morepath提供JSON Schema支持

此包提供对JSON Schema的Morepath集成,使用jsonschema实现

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

模式

需要将JSON schema加载到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的集成有助于在请求体被POST到一个视图时进行验证。首先,我们必须为我们自己的模式创建一个加载器

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。您甚至可以创建自己的验证器或扩展现有的验证器。只需将验证器传递给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异常。

此异常对象有一个包含验证错误的errors属性。您必须为它定义一个异常视图,否则验证错误将作为“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设为默认验证器。

  • 添加了对Black代码格式化器的集成。

0.1 (2017-03-17)

  • 首次公开发布。

项目详情


下载文件

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

源分布

more.jsonschema-0.2.tar.gz (6.1 kB 查看散列)

上传时间

构建分布

more.jsonschema-0.2-py2.py3-none-any.whl (6.8 kB 查看散列)

上传时间 Python 2 Python 3

由以下支持