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

相关文章
相关标签/搜索