Django与forms组件校验源码

1 读的入口是:
    form.is_valid()--->self.errors(BaseForm类)---》self.full_clean()(BaseForm类)---self._clean_fields(局部数据校验)和self._clean_form(全局数据校验)
2 self._clean_fields(BaseForm类)
        for name, field in self.fields.items():
            try:
                # 字段自己的校验(最大值,最小值,是不是邮箱格式)
                value = field.clean(value)
                self.cleaned_data[name] = value
                if hasattr(self, 'clean_%s' % name): # 反射判断有没有clean_字段名
                    value = getattr(self, 'clean_%s' % name)()
                    self.cleaned_data[name] = value
            except ValidationError as e:
                self.add_error(name, e)
                
3 self._clean_form(BaseForm类)  全局钩子
     try:
           cleaned_data = self.clean()  # self.clean执行的是自己类的clean方法
        except ValidationError as e:
           self.add_error(None, e)
        
面向切面编程(AOP  OOP:面向对象编程)
假若写一个类 使用者在外面写了能用或者不写调方法也能用 在类中写一个反射
每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
原文地址:https://www.cnblogs.com/kylin5201314/p/13859100.html