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:面向对象编程)
假若写一个类 使用者在外面写了能用或者不写调方法也能用 在类中写一个反射

 

posted @ 2020-10-22 16:33  Οo白麒麟оΟ  阅读(73)  评论(0编辑  收藏  举报