• django自定义form验证error


    Django:Form中自定义错误提示信息  

    具体讲解可查看:Cleaning a specific field attribute
     
    例一:检查特定Field的错误信息,并且在模板中给出提示。
    例如在LoginForm表单中,需要检查字段邮箱email是否存在于数据库,可以在 LoginForm 类中定义函数:

    class LoginForm(forms.Form):

    email = forms.EmailField(error_messages={'required':u'邮箱不能为空','invalid':u'请输入正确的邮箱'})
    password = forms.CharField(widget=forms.PasswordInput(),error_messages={'required':u'密码不能为空'})
    def clean_email(self):
    from users.models import User
    data=self.cleaned_data['email']
    is_exist=User.objects.filter(email=data).exists()

    if not is_exist:
    raise forms.ValidationError(u"这个邮箱还没有注册哦,请注册后再登录!")
    return data

    模板错误提示对应的变量:{{form.email.errors}}

    <div><label for="id_email">邮箱</label><span style="margin-left:10px">{{ form.email }}{{form.email.errors}}</span></div>

     
    例二:同时检查多个字段,并且在模板中给出提示。在LoginForm表单中增加clean()函数即可

    def clean(self):
    from users.models import User
    cleaned_data=self.cleaned_data
    data_email=cleaned_data.get("email")
    data_password=cleaned_data.get("password")
    if data_password:
    is_exist=User.objects.filter(email=data_email,password=data_password).exists()
    if not is_exist:
    raise forms.ValidationError(u"密码错误!")
    return cleaned_data

    模板错误提示 对应的变量 :{{form.non_field_errors}}
     
    特别注意:clean函数是在调用form.is_valid()后默认自动执行的函数,因此,在执行后return回的值特别重要。一般而言,要向获得所有值, return cleaned_data是必须的。 return data_email,data_password则会返回这两个值,此时,在views.py函数中调用is_valid()函数后,则只能得到一个列表,包含两个值,而非cleaned_data字典了
     
    例三:修改密码功能中,在form.py中获取当前用户id,检测该用户的输入的密码是否与真实密码一致
    form.py,PasswordForm,通过一个隐藏的类型uid用来存放当前用户id

    class PasswordForm(forms.Form):
    uid= forms.CharField(widget=forms.HiddenInput()) #隐藏的类型,用来获取当前用户id
    oldpsw = forms.CharField(widget=forms.PasswordInput(),error_messages={'required':u'旧密码不能为空'})
    newpsw1 = forms.CharField(widget=forms.PasswordInput(),error_messages={'required':u'新密码不能为空'})
    newpsw2 = forms.CharField(widget=forms.PasswordInput(),error_messages={'required':u'密码不能为空'})

    def clean(self):
    from users.models import User

    oldpassword=self.cleaned_data.get('oldpsw')
    newpassword1=self.cleaned_data.get('newpsw1')
    newpassword2=self.cleaned_data.get('newpsw2')
    uid=self.cleaned_data.get('uid')
    realpsw=User.objects.get(id=uid).password #通过获取的
    if realpsw==oldpassword:
    if newpassword1!=newpassword2:
    raise forms.ValidationError(u'新密码两次输入不一样,请重新输入')
    else:
    raise forms.ValidationError(u'旧密码错误,请重新输入')
    return self.cleaned_data

    模板中对应的自定义uid类型,以获取渲染该模板时得到的id值:

    <input type="hidden" name="uid" value="{{id}}" /> 这里特别注意name要与PasswordForm定义的名字一致

  • 相关阅读:
    linux初学者-正则表达式
    linux初学者-文件管理篇
    linux初学者-常用基本命令篇
    初学者的linux
    java中接口的定义和接口的实现
    深入理解Java的接口和抽象类
    在pom.xml中的dependencies点击add怎么没有搜索到相关jar包
    json对象(对象+数组)
    poi导出模板(我的备份)
    js对象和数组的定义
  • 原文地址:https://www.cnblogs.com/xc1234/p/8583956.html
Copyright © 2020-2023  润新知