Python 闭包和__call__详解及开发实践
背景 最近在使用 wtform 做后台的表单验证时候,跟很多框架使用的方法一样,它是结合ORM的对象提供校验, wtform 默认提供了不少的校验器,但是有的字段需要自己编写一些业务相关的校验器。 自定义的每个校验器的特点都是接受两个参数,form, field。 所以我们自己自定义校验器,校验器都必须是可调用对象即可,即函数,对象方法,都可以的。 比如function url_validate(form, field) 我们可以使用下面几种方式来实现 使用函数定制 def my_length_check ( form , field ) : if len ( field . data ) > 50 : raise ValidationError ( 'Field must be less than 50 characters' ) class MyForm ( Form ) : name = StringField ( 'Name' , [ InputRequired ( ) , my_length_check ] ) 上面提供一个my_length_check()函数,用于验证name长达是否长于50个字符。 这个函数按照规定接受两个参数,form, field,然后就可以根据两个参数进行判断。 这样做是可以的,但是问题是: 如果我想自定义错误信息怎么办?而且里面的限制是50,