python - cerberus:禁止现场存在

标签 python validation cerberus

我想使用 Cerberus 来验证某个字段存在于对象中。

我想使用类似的东西:

my_schema = {
    'normal_field': {
        'type': 'string',
    },
    'forbidden_field': {
        'forbid': True,
    },
}

基本上,我不想接受带有forbidden_​​field 的对象。现在我接受更改我的验证器:

validator.allow_unknown = False

这基本上是设置一个只有“允许”字段的模式的技巧,但我不太喜欢它的作用,因为这禁止我接受其他字段,而不仅仅是 forbidden_​​field .

我还看到了allowedforbidden 验证规则,但是它们检查的是字段的值,而不是字段是否真的存在。

那么,我怎样才能告诉我的验证器只禁止 Cerberus 存在特定字段?

最佳答案

我似乎记得以前遇到过这个特定的用例。您可以尝试以下操作:

from cerberus import Validator

schema = {
    'foo': {
        'type': 'string',
        'validator': lambda field, value, error: error(field, 'field is forbidden!!'),
    }
}
v = Validator(schema)
v.allow_unknown = True
doc = {
    'foo': 'bar'
}
print(v.validate(doc))

结果应该返回 False 并且 v.errors 应该说“field is forbidden!!”

见:

关于python - cerberus:禁止现场存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55681888/

相关文章:

python - 如何在 python 中从数组创建字典

python - Django 验证器函数的返回值存储在哪里?

python - Pandas 根据 bool 条件选择行和列

android - 为什么我不能在 Fragment 中调用方法

javascript - 无需提交表单的 MVC 表单验证

python - 使用 Cerberus 进行 SQLAlchemy 整个模型验证

python - Cerberus:将 "required"字段与自定义验证器一起使用

Python:使用 cerberus 进行验证

python - 我的代码的运行时复杂度是 O(a+b) 吗?

python - 如何根据标签之前的标签类别值删除标签?