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.(清楚优于含糊)