Django Form -- 自定義字段的規則驗證和錯誤提示


  • error_messages=None
  • validators=[]

 

  •  自定義驗證規則方式一:
    • from django import forms
      from django.forms import fields
      from django.forms import widgets
      from django.core.validators import RegexValidator
      
      class DetailForm(forms.Form):
      
          inp = fields.Field(
      
              #表單輸入必須是數字,並且數字必須是159開頭
              validators=[RegexValidator(r'^[0-9]+$', '請輸入數字'), RegexValidator(r'^159[0-9]+$', '數字必須以159開頭')],
              )
      

       

  • 自定義驗證規則方式二:
    • from django import forms
      from django.forms import fields
      from django.forms import widgets
      import re
      from django.core.exceptions import ValidationError
      
      #定義驗證規則的函數
      def mobile_validate(value):
          mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
          if not mobile_re.match(value):
              raise ValidationError('手機號碼格式錯誤')
      
      class DetailForm(forms.Form):
      
          # 使用自定義驗證規則
          inp = fields.Field(validators=[mobile_validate, ],
                                  error_messages={'required': '手機不能為空'},
                                  widget=widgets.TextInput(attrs={'placeholder': u'手機號碼'}))
      

       

  • 自定義驗證規則方式三:
    • from django import forms
      from django.forms import fields
      from django.forms import widgets
      from django.core.exceptions import ValidationError
      from django.core.validators import RegexValidator
      
      class DetailForm(forms.Form):
          inp = fields.Field(
              validators=[RegexValidator(r'^[0-9]+$', '格式錯誤', 'invalid')],
          )
      
          #二次驗證函數的名字是固定寫法,以clear_開頭,后面跟上字段的變量名
          def clean_inp(self):
      
              #通過了validators的驗證之后,在進行二次驗證
              value = self.cleaned_data['inp']
              if "123" in value:
                  raise ValidationError('內容不符合要求', 'invalid')
      
              #通過了二次驗證之后,返回表單數據,通過value_dic = obj.clean()能夠得到驗證通過后的表單數據
              return value
      

       

       

       

  • 自定義錯誤
    • from django import forms
      from django.forms import fields
      from django.forms import widgets
      from django.core.validators import RegexValidator
      
      class DetailForm(forms.Form):
      
          inp = fields.Field(
      
              #error_messages中的err1與RegexValidator中的code='err1'對應
              #error_messages的優先級高,如果表單輸入的不是數字,會提示 '類型不符合要求'
              validators=[RegexValidator(r'^[0-9]+$', '請輸入數字', code='err1'), RegexValidator(r'^159[0-9]+$', '數字必須以159開頭', code='err2')],
              error_messages={'err1': '類型不符合要求', 'err2': '格式不符合要求'}
              )
      

       

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM