如何强制Cerberus不跳过空值,对其执行全规则校验
解决Cerberus中空值参与全规则校验的问题
要让空值(比如空字符串)参与所有校验规则(包括自定义规则),核心是关闭Cerberus默认的空值跳过逻辑,具体操作如下:
- 在字段的Schema配置中添加
"empty": false,这会强制Cerberus不对空值跳过校验,转而执行后续的所有规则(type、minlength、自定义规则等)。 - 无需依赖
nullable规则,它的作用是允许值为None,和空字符串这类空值的校验逻辑无关。
修改你提供的Schema示例,调整后如下:
"columns":{ "foobar":{ "type":"string", "minlength":6, "maxlength":6, "empty": false, "my_custom_rule": { "value_to_check_against": "foo-bar" }, "meta": { "foo_bar":"FOOBAR" } } }
自定义规则的适配补充
如果你的my_custom_rule之前未处理空值场景,需要确保它能接收空值并生成对应错误信息。比如在自定义规则的实现中,直接将空值与配置的value_to_check_against对比,当不相等时抛出"x值与y值不相等"的错误即可——现在因为empty: false,空值会正常进入自定义规则的校验流程。
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

