博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django自定义form验证error
阅读量:6844 次
发布时间:2019-06-26

本文共 2421 字,大约阅读时间需要 8 分钟。

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

具体讲解可查看:
 
例一:检查特定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定义的名字一致

转载于:https://www.cnblogs.com/xc1234/p/8583956.html

你可能感兴趣的文章
openresty+lua+nginx_upstream_check_module等其他模块安装
查看>>
下载RPM包而不安装
查看>>
华为路由器命令解释大全
查看>>
点和圈的理论在软件测试中的思考
查看>>
Python将被纳入高考,小学生都在学Python,你慌了吗?
查看>>
PHP集成开发环境里面的www问题
查看>>
LVS负载均衡的搭建纯文本
查看>>
oracle中,约束、表名、Index等的名称长度限制最大只能30个字符
查看>>
Redis 5.0
查看>>
第一章 搭建一个通用的.net core项目框架
查看>>
使用Visual Studio 快速把 Json,Xml 字符串创建为一个实体类
查看>>
Asp.net 获取网页源代码
查看>>
Asp.net实现URL重写
查看>>
UVA 11796Dog Distance[平面几何]
查看>>
笔试题--mulicore编程题
查看>>
redis 常用命令
查看>>
Python语言学习 (十)1.1
查看>>
版面绘图失败问题记录
查看>>
无线Web开发经验谈
查看>>
[置顶] 多操作系统平台协同开发时 GIT 的注意事项: 不同操作系统中的换行符(不要使用git的换行符自动转换功能,并且,尽可能保证代码的换行符都是unix); 避免使用第三方插件(...
查看>>