跳转到主要内容

验证字典与模式

项目描述

https://badge.fury.io/py/valedictory.svg https://readthedocs.org/projects/valedictory/badge/?version=latest

Valedictory验证dict中的数据。它设计用于API验证,以及其他接收结构化JSON数据而不是键值POST表单数据的场景。它接受一个包含数据(可能来自JSON POST请求)的dict,并验证这些数据是否符合某些字段。

验证器定义为类。在Validator类上声明字段。一旦构建,Validator实例是不可变的。

from valedictory import Validator, fields, InvalidDataException

class PersonValidator(Validator):
    name = fields.CharField()
    height = fields.IntegerField()
    date_of_birth = fields.DateField()

person_validator = PersonValidator()

可以使用Python dict来检查它是否符合此验证器。该dict可以来自JSON POST请求、配置文件或任何其他需要验证和清理的外部数据源。将返回清洗后的数据。Validator类将返回一个包含清洗数据的dict。每个字段类型可能在清洗过程中转换数据。例如,DateField将数据转换为datetime.date实例。

input_data = json.loads(request.body)

try:
    # cleaned_data will be a dict of cleaned, validated data
    cleaned_data = person_validator.clean(input_data)

    # Do something with the returned data
    Person.objects.create(**cleaned_data)

except InvalidDataException as errors:
    # The data did not pass validation
    for path, message in errors.flatten():
        # This will print something like 'name: This field is required'
        print("{0}: {1}".format('.'.join(path), message))

验证器可以嵌套,允许任意复杂性的dict

class ArticleValidator(Validator):
    content = fields.CharField()
    published = fields.DateTimeField()
    author = fields.NestedValidator(PersonValidator())
    tags = fields.ListField(fields.CharField())

# Some example data that would pass validation:
data = {
    "content": "An interesting article",
    "published": "2018-06-13T1:44:00+10:00",
    "author": {
        "name": "Alex Smith",
        "height": 175,
        "date_of_birth": "1990-03-26",
    },
    "tags": ["humour", "interesting", "clickbait"],
}

阅读文档以获取更多信息.

项目详情


下载文件

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

源代码分发

valedictory-0.9.0.tar.gz (17.9 kB 查看哈希值)

上传时间 源代码

由以下支持