Form自定义错误信息

Form中的字段

CharField                                  字符串
EmailField                                 email
GenericIPAddressField             IP

Form字段参数

requred=True   必填
error_messages 自定义错误信息

字段参数取值:
1、required:用户名值不为空 -----》  'required':('ip地址不能为空')
2、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

def form(request):
    obj=Alongin()                                  #定义1个对象   
    if request.method=='POST':
        CheckForm=Alongin(request.POST)
        print(CheckForm.errors)        #输出错误信息    errors

获取错误信息:

views.py

CheckForm.errors['username']           获取username 的错误信息

 返回<ul class="errorlist"><li>用户名不能为空</li></ul>

因为CheckForm.errors  是一个 django.forms.utils.ErrorDict 对象 ,可看做1个字典

通过CheckForm.errors['username']   可查看对应 input[name =username] 的错误信息

再通过 as_json() 可以看出 列表内部为列表包含的 错误信息

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

转载于:https://my.oschina.net/esdn/blog/812417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值