Str*_*ire 5 python oop django validation class
我正在使用Django 1.8。
编写验证器的文档中有一个基于函数的验证器的示例。它还在使用类时说以下内容:
您也可以将类与
__call__()方法结合使用,以使用更复杂或可配置的验证器。例如,RegexValidator使用此技术。如果在验证器模型字段选项中使用了基于类的验证器,则应通过添加deconstruct()和__eq__()方法确保迁移框架可将其序列化。
__call__()用途是什么,如何使用?deconstruct()用途是什么,如何使用?__eq__()用途是什么,如何使用?一个例子会有所帮助。完整的答案也可能值得在正式文档中提交。
谢谢!
从一开始,几乎没有任何缺点 - 除了实现基于类的验证器可能有些复杂之外。
但也有一些优点:您可以在类实例中保存一些内容以供将来验证,因此每次验证某些内容时都不会计算它,例如编译的正则表达式模式。您还可以通过将代码分散到类中的其他方法中来创建更复杂的验证器。
此外,您可以使用一些参数构建验证器,这些参数可以在稍后的验证过程中使用。
__call__方法是实际的验证函数 - 它将像具有相同参数的普通验证函数一样被调用(以及附加self参数 - 类的实例,就像在所有方法中一样)。它不是来自 django 框架的东西,而是来自 python 本身。任何类都可以像函数一样被调用,只要它__call__实现了方法。deconstruct方法在迁移序列化中进行了解释。__eq__也是来自Python本身,每个类都可以有它,它只会比较2个对象来检查它们是否相等。