django框架提供了一個forms類,來處理web開發中的表單相關事項。衆所周知,form最常作的是對用戶輸入的內容進行驗證,爲此django的forms類提供了全面的內容驗證支持。html
注意一點:自定義驗證機制時:clean()和clean_
看下views.py中的代碼:django
... from django import forms from django.core.exceptions import ValidationError import re 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 LoginForm(forms.Form): user = forms.CharField(required=True, error_messages={'required': '用戶名不能爲空.'}) pwd = forms.CharField(required=True, min_length=6, max_length=10, error_messages={'required': '密碼不能爲空.', 'min_length': "至少6位"}) pwd2 = forms.CharField(required=True, min_length=6, max_length=10, error_messages={'required': '密碼不能爲空.', 'min_length': "至少6位"}) num = forms.IntegerField(error_messages={'required': '數字不能空.', 'invalid': '必須輸入數字'}) phone = forms.CharField(validators=[mobile_validate, ], ) def clean_user(self): user = self.cleaned_data.get('user') if user == 'cc': raise forms.ValidationError('用戶名是個人!') return user def clean(self): cleaned_data = self.cleaned_data pwd = cleaned_data['pwd'] pwd2 = cleaned_data['pwd2'] print(pwd,pwd2) if pwd != pwd2: raise forms.ValidationError('二次輸入密碼不匹配') return cleaned_data #注意此處必定要return clean_data,不然會報錯 def login(request): if request.POST: objPost = LoginForm(request.POST) ret = objPost.is_valid() if ret: print(objPost.clean()) else: from django.forms.utils import ErrorDict print(objPost.non_field_errors()) pass return render(request, 'login.html', {'obj1': objPost}) else: objGet = LoginForm() return render(request, 'login.html', {'obj1': objGet}) ...
HTML 頁面中,若是想取clean()報錯的信息,因其自己是一個迭代器,因此咱們能夠循環返回數據的non_field_errors
取值,好比:框架
<div> {% if obj1.non_field_errors %} {% for item in obj1.non_field_errors %} <span class="error_msg">{{ item }}</span> {% endfor %} {% endif %}
我來看下html中的設置:函數
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> .error_msg{ color: red; } </style> </head> <body> <form action="/login/" method="POST"> <div>用戶名: {{ obj1.user }} {% if obj1.errors.user %} <span class="error_msg">{{ obj1.errors.user.0 }}</span> {% endif %} </div> <div>密碼: {{ obj1.pwd }} {% if obj1.errors.pwd %} <span class="error_msg">{{ obj1.errors.pwd.0 }}</span> {% endif %} </div> <div>確認密碼: {{ obj1.pwd2 }} {% if obj1.errors.pwd2 %} <span class="error_msg">{{ obj1.errors.pwd2.0 }}</span> {% endif %} </div> <div>數字: {{ obj1.num }} {% if obj1.errors.num %} <span class="error_msg">{{ obj1.errors.num.0 }}</span> {% endif %} </div> <div>電話: {{ obj1.phone }} {% if obj1.errors.phone %} <span class="error_msg">{{ obj1.errors.phone.0 }}</span> {% endif %} </div> <div> {% if obj1.non_field_errors %} {% for item in obj1.non_field_errors %} <span class="error_msg">{{ item }}</span> {% endfor %} {% endif %} </div> <input type="submit" value="提交"/> </form> </body> </html>