gpt4 book ai didi

python - Cerberus 自定义规则和自定义验证器之间有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 21:52:12 26 4
gpt4 key购买 nike

来自documentation ,我不清楚自定义规则和自定义验证器在用例中的区别是什么。在文档中给出的示例中,唯一的区别是额外的 if 语句检查自定义规则中 is_odd 的值。我什么时候应该更喜欢自定义规则,什么时候应该更喜欢自定义验证器?


自定义规则

schema = {'amount': {'isodd': True, 'type': 'integer'}}
from cerberus import Validator

class MyValidator(Validator):
def _validate_isodd(self, isodd, field, value):
""" Test the oddity of a value.

The rule's arguments are validated against this schema:
{'type': 'boolean'}
"""
if isodd and not bool(value & 1):
self._error(field, "Must be an odd number")

自定义验证器

from cerberus import Validator
schema = {'amount': {'validator': 'oddity'}}

class AValidator(Validator):
def _validator_oddity(self, field, value):
if value & 1:
self._error(field, "Must be an odd number")

最佳答案

您使用 validator当您想将某个字段值的验证委托(delegate)给自定义函数或方法(后者是模式中的字符串引用)时的规则,如下所示:

>>> def oddity(field, value, error):
... if not value & 1:
... error(field, "Must be an odd number")

>>> schema = {'amount': {'validator': oddity}}
>>> v = Validator(schema)
>>> v.validate({'amount': 10})
False

>>> v.errors
{'amount': 'Must be an odd number'}

>>> v.validate({'amount': 9})
True

请注意,这些签名是固定的,它们恰好采用 field(文档中的字段名称)、valueerror(一种提交错误的方法)作为参数。

Custom rules只能在 Validator 子类中定义。与将验证可调用项定义为约束的 validator 规则相比,自定义规则约束可以在模式中定义,该模式也传递给自定义规则实现(在 this answer's example 中,它被命名为 其他)。因此,可以在模式中控制规则的行为。

看起来 validator 规则的文档即使不是完全错误也具有误导性,我应该尽快去修复它!感谢您的报告。

关于python - Cerberus 自定义规则和自定义验证器之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com