【问题标题】:Python: validation using cerberusPython:使用 cerberus 进行验证
【发布时间】:2020-05-06 12:01:14
【问题描述】:

我想验证一个dict,其中一个字段可能包含intList[int]。此外,所有int 都必须为正数。

我需要一些帮助来设置架构。下面的架构无法正常工作。他们不检查负数。也就是说,负数正在通过验证,这是不正确的。

import cerberus

v = cerberus.Validator()

schema1 = {
    "int_or_list_of_int": {
        "type": ["integer", "list"],
        "schema": {"type": "integer", "min": 0},
    },
}

schema2 = {
    "int_or_list_of_int": {
        "type": ["integer", "list"],
        "valuesrules": {"type": "integer", "min": 0},
    },
}

num1 = {"int_or_list_of_int": 5}
num2 = {"int_or_list_of_int": [5, 10]}
num3 = {"int_or_list_of_int": -5}
num4 = {"int_or_list_of_int": [5, -10]}

# schema 1
assert v.validate(num1, schema1)
assert v.validate(num2, schema1)
assert not v.validate(num3, schema1)  # Evaluates to True
assert not v.validate(num3, schema1)  # Evaluates to True

# schema 2
assert v.validate(num1, schema2)
assert v.validate(num2, schema2)to True
assert not v.validate(num3, schema2)  # Evaluates to True
assert not v.validate(num4, schema2)  # Evaluates to True

【问题讨论】:

    标签: python python-3.x validation cerberus


    【解决方案1】:

    首先,schema for int_or_list_of_int 应该在 int_or_list_of_int 字典中。其次,min 应该应用于整数(int_or_list_of_int 内部)和列表(schema 内部)。

    schema = {
        "int_or_list_of_int": {
            "type": ["integer", "list"],
            "min": 0,
            "schema": {"type": "integer", "min": 0}
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多