zoukankan      html  css  js  c++  java
  • 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.(清楚优于含糊)
  • 相关阅读:
    hdu-4638
    一个简单的询问
    CoderForces-617B
    HYSBZ-2002弹飞绵羊
    邻接表
    CoderForces-913-C
    CoderForces-913D
    CoderFocers-620C
    CoderForces-375D
    HDU-6119
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13859100.html
Copyright © 2011-2022 走看看