Django表单模块__call__
很好地使用了方法来实现用于表单验证的一致API。您可以将自己的表单验证程序编写为Django中的函数。
def custom_validator(value):
#your validation logic
Django有一些默认的内置验证器,例如电子邮件验证器,URL验证器等,这些验证器大致属于RegEx验证器。为了清晰地实现这些,Django求助于可调用类(而不是函数)。它在RegexValidator中实现默认的Regex验证逻辑,然后扩展这些类以进行其他验证。
class RegexValidator(object):
def __call__(self, value):
# validation logic
class URLValidator(RegexValidator):
def __call__(self, value):
super(URLValidator, self).__call__(value)
#additional logic
class EmailValidator(RegexValidator):
# some logic
现在,可以使用相同的语法调用自定义函数和内置的EmailValidator。
for v in [custom_validator, EmailValidator()]:
v(value) # <-----
如您所见,Django中的此实现类似于其他人在下面的答案中解释的实现。可以通过其他任何方式实现吗?您可以,但是恕我直言,对于像Django这样的大型框架,它不那么易读或易于扩展。