django学习笔记---Django进⾏验证时form表单的error及error
的⼏种前端展⽰
form表单只有经过form.is_valid()验证后,才能获取form.cleaned_data和s 。他们都是“字典”的形式(应该不是平常的字典类型),从下⾯的fm.errors.as_json()的结果可以看出,但是你不能认为是字典就能这样取值,fm.errors.as_json()['user']。取值⽅式可以通过查看errors信息取值。
上⾯2个图是debug后得到的errors信息,在后端中可以这样取值,前端的取值下⾯会介绍
s['mobile'][0]
确保该变量包含不超过 11 字符 (⽬前字符数 17)。
s['mobile'].data
[ValidationError(['确保该变量包含不超过 11 字符 (⽬前字符数 17)。'])]
解析:为什么['mobile']要这样写,⽽却可以写出  ".data",能写成 ".mobile"吗?
不能。从图中可以看出  mobile是带有引号的,可以简单的认为是字典中的字符串。没有双引号的就⽤ ".data"这种取。特殊,0的话要⽤“[0]”取值
1. 通过js展⽰form表单的错误
django的form表单是验证⽤户在前端填写的model字段,判断⽤户填写的值是否满⾜设计model时那些字段的限制条件。
⽐如,定义2个字段
nick_name = models.CharField(max_length=50,verbose_name=u'昵称',default=u"")
mobile = models.CharField(max_length=11,verbose_name=u"⼿机",null=True,blank=True)
如果你填写的字段超过了限定的字段,想在js中展⽰这些错误,可以这么写
success: function(data) {
data = JSON.parse(data)
}if(data.status == "failure"){
var m = "";
var n = data.msg;
for(var error in data.msg){m+=data.msg[error]+"</br>";console.log(data.msg[error])}
console.log(m);
2  通过Django的模板语⾔展⽰错误
在form表单中定义好想要在前端展⽰的错误信息,{error_messages},然后进⾏表单验证obj = FM(request.POST)
,在前端可以⽤0来显⽰错误信息
views.py
from django import forms
class FM(forms.Form):
user = forms.CharField(error_messages={'required':'⽤户名不能为空'})  # 定制错误信息
pwd = forms.CharField(max_length=12,min_length=6,error_messages={'required':"密码不能为空","max_length":"密码长度⼩于12","min_length":"密码长度⼤于6    email = forms.EmailField(error_messages={'required':'邮箱不能为空','invalid':"邮箱格式不对"})
def fm(request):
hod == "GET":
fm = FM()
return render(request,'fm.html',{'fm':fm})    # 将fm对象传到fm.html中,不然get进去页⾯就显⽰为空的
hod == "POST":
fm = FM(request.POST)
r1 = fm.is_valid()  # 如果form表单的数据填写符合规范则为真,(email的按照email的格式)
if r1:
print(fm.cleaned_data)
models.ate(**fm.cleaned_data)  # 这样就在数据库中⽣存⼀条记录了
else:
s)  # <ul class="errorlist"><li>user<ul class="errorlist"><li>⽤户名不能为空</li></ul></li><li>pwd<ul class="errorlist"><li>密码长度⼤于6</li></ul            s.as_json())  # {"user": [{"message": "\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a", "code": "required"}], "pwd": [{"messa
ge": "\u5bc6\u78    return render(request,"fm.html",{'fm':fm})
fm.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/app1/fm/" method="POST">
{% csrf_token %}
<p>{{ fm.user }}{{ fm.errors.user.0 }}</p>  <!-- 获取第⼀个错误 -->
django怎么学<p>{{ fm.pwd }}{{ fm.errors.pwd.0 }}</p>
<p>{{ fm.email }}{{ ail.0 }}</p>
<input type="submit" value="提交" />
</form>
</body>
</html>
要把required去掉,email变成text,变成低级浏览器模式,才能在input框旁边⽣成⾃定义的错误。因为⾼级浏览器会⾃带required,不然错误提⽰就是这样的
还有⼏种的如下图,⽐如将msg直接放在render中返回到前端。总结,后端传递的error有FM().errors.user.0  / FM().s

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。