zoukankan      html  css  js  c++  java
  • Django Form组件 基于源码的扩展

    1、自定义方法,验证单独某个字段

    class AjaxForm(forms.Form):
    username = fields.CharField()
    user_id = fields.IntegerField(
    widget=(
    widgets.Select(choices=[(0, '张三'), (1, '李四'), (2, '王五'), ])
    )
    )
      
      # 通过源码可得,当字段通过正则验证后,会执行clean_字段名 的方法,并返回 self.cleaned_data[字段名]
      # 我们可以自行定义此方法,扩展form组件,以下代码,与源码执行流程一致,只是我们重新定义了
      # def clean_username(self):    
      #   return self.cleaned_data['username']  # 必须有返回值
      #
      # def clean_user_id(self):
      #   return self.cleaned_data['user_id']

      # 开始扩展,当用户名通过验证后再去验证数据库中是否有相同的用户名,如果有就发出错误信息
      
      from django.core.exceptions import NON_FIELD_ERRORS, ValidationError  # 在源码中出错会抛出一个 ValidationError 异常
      def clean_username(self): 
        v = self.cleaned_data['username']  # 只能取当前字段的值,不能取其它字段的值
        if models.UserInfo.objects.filter(username=v).count():  如果用户数大于0
          raise ValidationError('用户名已存在') 
        return self.cleaned_data['username']

     2、自定义方法,验证整体

    class AjaxForm(forms.Form):
        username = fields.CharField()
        user_id = fields.IntegerField(
            widget=(
                widgets.Select(choices=[(0, '张三'), (1, '李四'), (2, '王五'), ])
            )
        )
      
      # 通过源码可得,当字段通过正则验证后,会执行clean_字段名 的方法,并返回 self.cleaned_data[字段名]
      # 我们可以自行定义此方法,扩展form组件,以下代码,与源码执行流程一致,只是我们重新定义了
      # def clean_username(self):    
      #   return self.cleaned_data['username']  # 必须有返回值 
      #
      # def clean_user_id(self):
      #   return self.cleaned_data['user_id']
    
      # 开始扩展,当用户名通过验证后再去验证数据库中是否有相同的用户名,如果有就发出错误信息
      
      from django.core.exceptions import NON_FIELD_ERRORS, ValidationError  # 在源码中出错会抛出一个 ValidationError 异常
      def clean_username(self): 
        v = self.cleaned_data['username']  # 只能取当前字段的值,不能取其它字段的值
        if models.UserInfo.objects.filter(username=v).count():  如果用户数大于0
          raise ValidationError('用户名已存在') 
        return self.cleaned_data['username']


      def clean(self):  # django为我们预留了这个钩子函数,当所有
    clean_字段名 的方法结束后,会再执行这个函数
        value_dict = self.cleaned_date   # 获取所有通过验证的数据
        v1 = value_dict.get('username')
        v2 = value_dict.get('user_id')
        if v1 == 'root' and v2 == 1:
          raise ValidationError('整体错误信息') # 在前端取时,用__all__来取
        return self.cleaned_data
      

      def _post_clean(self):  当clean方法执行完成后,还会再执行这个方法,我们可以重写,没有返回值,一般不用
        pass
  • 相关阅读:
    compile js file in java project
    AS400上的C编程
    Linux图片工具
    vncserver nonroot user
    [struts]freemarker.beans: Key "location" was not found on instance of java.lang.NullPointerException
    VS2010 express中改变VC Default include/lib/… 目录
    重启博客,回味在深圳打拼的软件从业生涯,与同路人共勉
    JavaScript设置Cookie、获取Cookie和清除Cookie
    WebService 开启参数调试
    JavaScript获取Url参数
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9671886.html
Copyright © 2011-2022 走看看