我正在尝试在Python中使用Cerberus来验证一些数据。
我发现对于“布尔”类型,验证器始终返回True,如下所示:

import cerberus
bool_schema = {'name': {'type': 'boolean', 'required': True}}
cerberus.schema_registry.add('bool_schema', bool_schema)

v = cerberus.Validator({'name': {'schema': 'bool_schema'}})
test1 = {'name': 'a'}
test2 = {'name': 0}
print(v.validate(test1))
print(v.validate(test2))


上面的代码显示两个True。
实际上,我需要验证值是True还是False(Python中的布尔类型),其他值不应通过验证器。

最佳答案

这是一个语义问题。尽管您没有明确指定要实现的目标,但我假设您要测试字典中映射到name的值是否为布尔值并确保其存在。

在示例代码的第4行中,您正在定义一个架构,该架构引用了架构注册表中先前定义的架构。验证时将被解释为

{'name':
    {'schema': {
       {'type': 'boolean',
        'required': True}
}}}


第二级schema规则将仅被if the value of name is a mapping处理。在您的每个示例中,情况并非如此,它根本不会有效地处理任何规则,因此验证每次都会返回True

为了回答我上面假设的问题,将涵盖以下内容:

import cerberus
required_boolean = {'type': 'boolean', 'required': True}
cerberus.rules_set_registry.add('required_boolean', required_boolean)
v = cerberus.Validator({'name': 'required_boolean'})

09-07 17:17
查看更多