Form自定義錯誤信息

Form中的字段

CharField                                  字符串
EmailField                                 email
GenericIPAddressField             IP
html

Form字段參數

requred=True   必填
error_messages 自定義錯誤信息
python

字段參數取值:
一、required:用戶名值不爲空 -----》  'required':('ip地址不能爲空')
二、invalid: IP格式錯誤 ---------》 'invalid':('ip格式錯誤')

class Alongin(forms.Form):
    username=forms.CharField(max_length=30)
    email=forms.EmailField(required=True)
    ip=forms.GenericIPAddressField(error_messages={'required':('ip地址不能爲空'),'invalid':('ip格式錯誤')})

注意:error_messages 這裏 error 沒有s
          而 type(CheckForm.errors) 的 errorDict字典對象 errors 有s
django

def form(request):
    obj=Alongin()                                  #定義1個對象   
    if request.method=='POST':
        CheckForm=Alongin(request.POST)
        print(CheckForm.errors)        #輸出錯誤信息    errors

獲取錯誤信息:

views.pyjson

CheckForm.errors['username']           獲取username 的錯誤信息 ui

 返回<ul class="errorlist"><li>用戶名不能爲空</li></ul>spa

由於CheckForm.errors  是一個 django.forms.utils.ErrorDict 對象 ,可看作1個字典code

經過CheckForm.errors['username']   可查看對應 input[name =username] 的錯誤信息orm

再經過 as_json() 能夠看出 列表內部爲列表包含的 錯誤信息 htm

as_json : [{"code": "required", "message": "\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a" }]對象

即<ul class="errorlist"><li>用戶名不能爲空</li></ul> 能夠看成列表來操做

CheckForm.errors['username'][0]       獲取username 的詳細錯誤信息

經過列表取值  xxx[0],能夠查看出正確的錯誤信息:用戶名不能爲空

html

{{CheckForm.errors.username.0}}

注意: 若是不加.0  的話,返回的是1個 ul 包含的錯誤信息

<ul class="errorlist"><li>用戶名不能爲空</li></ul>

而咱們只須要 錯誤內容,因此推薦加 xxxx.errors.xxxx .0

自定義錯誤實例:

兩次輸入密碼不同,在第二個密碼框提示錯誤

方法1:add.error(field,error)

def clean(self):
    cleaned_data = super(FM, self).clean()
    pwd1 = self.cleaned_data.get('pwd1')
    pwd2 = self.cleaned_data.get('pwd2')
    if pwd1 != '' and pwd2 != '' and pwd1 != pwd2:
        self.add_error('pwd2', error='兩次輸入的密碼不同') #添加自定義錯誤
    else:
        return cleaned_data

注意,你覆蓋的 Form.clean() 引起的任何錯誤將不會與任何特定的字段關聯。它們位於一個特定的「字段」(叫作 __all__ )中,若是須要能夠經過non_field_errors() 方法訪問。若是你想添加一個特定字段的錯誤到表單中,須要調用 add_error()

方法2:clean_<fieldname>()

def clean_pwd2(self):
        cleaned_data = super(FM, self).clean()
        pwd1 = self.cleaned_data.get('pwd1')
        pwd2 = self.cleaned_data.get('pwd2')
        if pwd1 != '' and pwd2 != '' and pwd1 != pwd2:
            raise forms.ValidationError('兩次輸入密碼不一致')  #這裏不用導入ValidationError
        else:
            return cleaned_data['pwd2']

常見驗證庫位置:

from django.core.exceptions import ValidationError from django.core.validators import RegexValidator from django.core import validators

相關文章
相關標籤/搜索