首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cerberus:禁止字段存在

cerberus:禁止字段存在
EN

Stack Overflow用户
提问于 2019-04-15 02:25:27
回答 2查看 477关注 0票数 4

我想使用Cerberus来验证一个字段是,而不是对象中的

我想用这样的方法:

代码语言:javascript
复制
my_schema = {
    'normal_field': {
        'type': 'string',
    },
    'forbidden_field': {
        'forbid': True,
    },
}

基本上,我不想接受forbidden_field附带的对象。现在,我正在接受使用以下内容更改我的验证器:

代码语言:javascript
复制
validator.allow_unknown = False

这基本上是用“只允许”字段设置模式的诀窍,但我并不真正喜欢它所做的工作,因为它禁止我接受其他字段,而不仅仅是forbidden_field

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

那么,我如何才能告诉我的验证器只禁止特定的领域存在与Cerberus?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-15 22:34:03

我用readonly规则修正了这个问题,这也允许我设置一个default_setter值。

@kchan的答案适用于不允许字段,但它破坏了规范化集成(例如,尝试将其与default_setter一起使用)。

票数 1
EN

Stack Overflow用户

发布于 2019-04-15 04:24:39

我似乎还记得以前遇到过这个特定的用例。您可以尝试以下几种方法:

代码语言:javascript
复制
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))

结果应该返回Falsev.errors应该说“字段是禁止的!”

见:

  • under Validation Rules in the Cerberus documentation
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55681888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档