zoukankan      html  css  js  c++  java
  • 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定义的名字一致

  • 相关阅读:
    WCF 第二章 契约 异步访问服务操作
    WCF 第一章 基础 在IIS中寄宿服务
    哈希表 解释 和 实现
    ACM2010省赛总结
    hashTable实现
    c# winform 应用编程代码总结 14
    徽文化让世博更多彩
    c# winform 应用编程代码总结 15
    Socket用法详解
    IE插件技术 BHO C# IE 插件
  • 原文地址:https://www.cnblogs.com/xc1234/p/8583956.html
Copyright © 2011-2022 走看看