一:表单验证:

场景:因为浏览器的js可以被禁用,所以需要做后台的输入合法的验证。

A:ajax发请求。需要注意的是ajax POST的数据的key值和form表单的里的字段名字一致,否则得不到验证!!!

通过ajax发请求给后端提交数据,然后后端通过form进行输入的验证。

之前ajax POST数据的时候后端需要做如下:

 def login(request):
if request.method=='POST':
user=request.POST.get('user')
pwd=request.POST.get('pwd ')
print(user,pwd)
return HttpResponse('ok')
return render(request,'login.html')

1:用form做用户验证的的时候,不需要做这些,直接将request.POST 传入form对象即可获取所有POST数据。

 class Loginform(forms.Form):
user=forms.CharField(required=True)#需要继承forms.Form这个模块
pwd=forms.CharField(required=True)#require=True表示该字段不能为空。 def login(request):
if request.method=='POST':
form_obj=Loginform(request.POST)#获取浏览器提交所有数据
if form_obj.is_valid():#检测POST过来的数据是否符合我们form定义。返回值是bool
data=form_obj.clean()#通过对象的clean()方法来获取用户的提交的数据。
print(data)
return HttpResponse('ok')
else:
error=form_obj.errors##通过errors()方法 来获取我们的提交的数据错误提示。这个方法加了装饰器@property变成字段。
print(error)
return HttpResponse(error)
return render(request,'login.html')

前端页面代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery-1.12.4.js"></script>
</head>
<body>
<div> <input name="user" type="text"></div>
<div><input name="pwd" type="password"></div>
<div><input type="button" value="提交" onclick="Submit(this)"></div>
<script>
function Submit(ths) {
var data_list={};
$('input').each(
function (i) {
var name=$(this).attr('name');
var val=$(this).val();
data_list[name]=val;
}
);
$.ajax({
url:'/login/',
type:'POST',
data:data_list,
success:function (data) {
console.log(data)
},
error:function (error) {
console.log(error)
}
})
}
</script>
</body>
</html>

输出结果:

 {'pwd': '', 'user': ''}
<ul class="errorlist"><li>pwd<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

aaarticlea/png;base64,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" alt="" />

输出打印error对象的类型:

 <class 'django.forms.utils.ErrorDict'>

可以看出他是一个类对象,我们导入这个对象查看下他的方法:

             error=form_obj.errors##通过errors()方法 来获取我们的提交的数据错误提示。这个方法加了装饰器@property变成字段。
from django.forms.utils import ErrorDict
print(type(error))
return HttpResponse(error)

查看源码:

 @html_safe
@python_2_unicode_compatible
class ErrorDict(dict):
"""
A collection of errors that knows how to display itself in various formats. The dictionary keys are the field names, and the values are the errors.
"""
def as_data(self):
return {f: e.as_data() for f, e in self.items()} def as_json(self, escape_html=False):
return json.dumps({f: e.get_json_data(escape_html) for f, e in self.items()}) def as_ul(self):
if not self:
return ''
return format_html(
'<ul class="errorlist">{}</ul>',
format_html_join('', '<li>{}{}</li>', ((k, force_text(v)) for k, v in self.items()))
) def as_text(self):
output = []
for field, errors in self.items():
output.append('* %s' % field)
output.append('\n'.join(' * %s' % e for e in errors))
return '\n'.join(output) def __str__(self):
return self.as_ul()

我们可以看到当我们print的时候输出的as_ul。错误信息输出有三种数据格式:

1、ul格式,就是之前我们输出的样式:

 <ul class="errorlist"><li>pwd<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

2:json格式。as_josn.

3:as_text.文本格式。 我们根据我们的需求来获得我们想要的格式。

下面用as_josn来获取我们的错误输出。

 def login(request):
if request.method=='POST':
form_obj=Loginform(request.POST)#获取浏览器提交所有数据
if form_obj.is_valid():#检测POST过来的数据是否符合我们form定义。返回值是bool
data=form_obj.clean()#通过对象的clean()方法来获取用户的提交的数据。
print(data)
return HttpResponse('ok')
else:
error=form_obj.errors##通过errors()方法 来获取我们的提交的数据错误提示。这个方法加了装饰器@property变成字段。
print(type(error))
error_msg=error.as_json()#获取错误信息json格式。
print(type(error_msg))
return HttpResponse(error_msg)
return render(request,'login.html')
 {"pwd": [{"message": "This field is required.", "code": "required"}], "user": [{"message": "This field is required.", "code": "required"}]}

因为传输的过程是字符串传输,可以在ajax出添加datatype:json来获取json串不需要进行转换。

我们自定义字典,方便我们取值。如上结果我们真正关心的是:“pwd”:[{"message": "This field is required."}]对于code的信息我们不关心。所以定义字典data_dic={"status":false,message:{None}}.

code:

 def login(request):
res={'status':False,'message':{}}
if request.method=='POST':
form_obj=Loginform(request.POST)#获取浏览器提交所有数据
if form_obj.is_valid():#检测POST过来的数据是否符合我们form定义。返回值是bool
data=form_obj.clean()#通过对象的clean()方法来获取用户的提交的数据。
print(data)
res['status']=True#符合form规则为true
return HttpResponse('ok')
else:
error=form_obj.errors##通过errors()方法 来获取我们的提交的数据错误提示。这个方法加了装饰器@property变成字段。
error_msg=error.as_json()
print(type(error_msg))#as_json转换过来的数据是字符串类型。
print(error_msg)
res['status']=False#不符合form规则我们定义status为Flase。
err_msg=json.loads(error_msg)#将字符串格式的json转换成字典格式,方便我们取值。
for key,val in err_msg.items():
res['message'].setdefault(key,val[]['message'])#循环取‘user’,‘pwd’对应的报错信息。
print(res)
return HttpResponse(json.dumps(res))#将json格式的转换成字符串返回给浏览器客户端。
return render(request,'login.html')

如上所示我们需要给字符串格式的json转成我们处理的数据类型,并取我们想要的值给浏览器返回。

aaarticlea/png;base64,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" alt="" />

需要注意的是:ajax中指定返回数据类型是dataType是大写的T!!!!!!

页面输出我们错误提示:

前端页面代码:

 <body>
<div> <input name="user" type="text"></div>
<div><input name="pwd" type="password"></div>
<div><input type="button" value="提交" onclick="Submit(this)"></div>
<script>
function Submit(ths) {
var data_list={};
$('.error').remove();#每次提交的时候,需要删除错误提示。
$('input').each(
function (i) {
var name=$(this).attr('name');
var val=$(this).val();
data_list[name]=val;
}
);
$.ajax({
url:'/login/',
type:'POST',
data:data_list,
dataType:'json',
success:function (data) {
if(data.status){
void
}else {
$.each(
data.message,function(key,val){
var tag=document.createElement('span');
tag.innerText=val;
tag.className='error';###注意不要用id因为一个html文本中id是唯一,他只能删除第一个。
$('input[name='+key+']').after(tag) }
);
}
},
error:function (error) {
}
})
}
</script>
</body>

效果:

aaarticlea/png;base64,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" alt="" />

如上代码行:8 需要用class来删除。因为如果用id进行删除的时候会出现:只删除第一个。而且id是唯一不能多次命名,多次提交会出现如下错误:

aaarticlea/png;base64,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" alt="" />

2:错误信息重写:

一:常规定义错误提示。

错误提示是英文。我们需要把英文错误提示转换成英文提示。

可以在我们后台form类中定义中文如下:

 class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'require':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True)#require=True表示该字段不能为空。

因为现在的错误提示是require做的限制。(required=True)。通过变量error_messages来定义错误。字典中key和我们做限制的参数名字一致。

效果:

aaarticlea/png;base64,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" alt="" />这是对之前的错误信息重写。

密码错误提示重写。

 class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'required':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True,min_length=,
max_length=,
error_messages={'required':'密码不为空!',
'min_length':'不能少于6位!',
'max_length':'长度不能超过10位!'})#require=True表示该字段不能为空。

效果:

aaarticlea/png;base64,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" alt="" />

二:对django自己做的错误提示重写:

我们添加一列数字,默认required=True。

 class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'required':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True,min_length=,
max_length=,
error_messages={'required':'密码不为空!',
'min_length':'不能少于6位!',
'max_length':'长度不能超过10位!'})#require=True表示该字段不能为空。
num=forms.IntegerField()

效果:

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

我们可以在我们自定义form类中重写这个错误提示。

 class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'required':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True,min_length=,
max_length=,
error_messages={'required':'密码不为空!',
'min_length':'不能少于6位!',
'max_length':'长度不能超过10位!'})#require=True表示该字段不能为空。
num=forms.IntegerField(error_messages={'invalid':'请输入数字!','required':'输入不能为空!'})

效果:

aaarticlea/png;base64,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" alt="" />

通过:print打印出我们的错误信息吗,到code选项找到那个参数做的限制。

对于第一个不能为空为;required做的限制。

通过后端打印输出error_messages可以看到是那个参数做的限制。

             error_msg=error.as_json()
print(type(error_msg))
print(error_msg)

aaarticlea/png;base64,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" alt="" />

还要其他的form验证比如说IP、mail等等!

 三:form验证扩展:如上是form为我们提供了验证。如果form里没有给我们提供验证呢?我们可以自定义验证扩展。

比如手机验证:

 def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError('手机号码格式错误')

我们可以在我们form类中定义相应的字段,需要导入模块:from django.core.exceptions import ValidationError用参数:validators=[]后面是列表。

code:

 from django.core.exceptions import ValidationError
import json,re
# Create your views here.
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError('手机号码格式错误')
class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'required':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True,min_length=,
max_length=,
error_messages={'required':'密码不为空!',
'min_length':'不能少于6位!',
'max_length':'长度不能超过10位!'})#require=True表示该字段不能为空。
num=forms.IntegerField(error_messages={'invalid':'请输入数字!','required':'输入不能为空!'})
phone=forms.CharField(validators=[mobile_validate])#注意的是函数名不是字符串。

aaarticlea/png;base64,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" alt="" />

我们可以定required的error_message来指定我们想要的内容。

code:

 phone=forms.CharField(validators=[mobile_validate,],error_messages={'required':'输入不能为空!'})

aaarticlea/png;base64,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" alt="" />

B:当页面有很多数据需要提交和验证,我们不能写每个input标签,当需要修改的时候,我们不能修改每个input标签,于是有第2种方法,form提交数据。

页面代码:

 <body >
<div>
<form action="/login/" method="post">
<div>{{obj_form.user }}</div>
{% if obj_form.errors %}
<span>{{ obj_form.errors.user.}}</span>
{% endif %}
<div>{{ obj_form.pwd }}</div>
{% if obj_form.errors %}
<span>{{ obj_form.errors.pwd.}}</span>
{% endif %}
<div>{{ obj_form.num }}</div>
{% if obj_form.errors %}
<span>{{ obj_form.errors.num.}}</span>
{% endif %}
<div>{{ obj_form.phone }}</div>
{% if obj_form.errors %}
<span>{{ obj_form.errors.phone.}}</span>
{% endif %}
<div><input type="submit" value="提交" ></div>
</form>
</div>

后台代码:

 def login(request):
if request.method=='POST':
obj_login=Loginform(request.POST)
if obj_login.is_valid():
return redirect('/login/')
else:
error=obj_login.errors
print(error['user'][])
return render(request,'login.html',{'obj_form':obj_login})
obj_form_get=Loginform()
return render(request,'login.html',{'obj_form':obj_form})

总结:

1、form提交验证和ajax提交验证,后台没什么变化,只是前者返回的页面,后者返回的是HttpResponse字符串。

2、form提交的时候,第一次是get请求的,所以第一次的obj_form_get对象内不包含我们提交数据。而POST请求的时候,obj_login对象他包含2部门内容:1:我们在前台表单填写的数据。2:包含我们验证的错误提示。

3、再去错误提示的时候,error默认的数据格式如下:

aaarticlea/png;base64,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" alt="" />

类似于列表,其中内容部分,是索引为0的字段。所以取值的时候如后台和前台代码那样取值:error['user'][0] 、obj_form.errors.num.0。在js中.点代替python中的[].

4、由于返回页面的时候,默认带有我们添加的<span>标签。所以需要去掉这个标签。

aaarticlea/png;base64,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" alt="" />

所以在前台页面加入if判断,来确定是否需要添加span标签。

         {% if obj_form.errors %}
<span>{{ obj_form.errors.phone.}}</span>
{% endif %}

C:指定生成特定的标签和属性。

form类中添加相应的属性。

 test=forms.CharField(widget=forms.TextInput(attrs={'class':'test'}))

在前端显示相应的标签:

 <div>{{ obj_form.test }}</div>

效果:

aaarticlea/png;base64,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" alt="" />

也可以生成自定义的属性。或者select标签等。

 choice=(
(,'大连'),
(,'沈阳'),
)
class Loginform(forms.Form):
user=forms.CharField(required=True,error_messages={'required':"用户名不能为空。"})#需要继承forms.Form这个模块
pwd=forms.CharField(required=True,min_length=,
max_length=,
error_messages={'required':'密码不为空!',
'min_length':'不能少于6位!',
'max_length':'长度不能超过10位!'})#require=True表示该字段不能为空。
num=forms.IntegerField(error_messages={'invalid':'请输入数字!','required':'输入不能为空!'})
phone=forms.CharField(validators=[mobile_validate,],error_messages={'required':'输入不能为空!'})
test=forms.CharField(widget=forms.Select(choices=choice))

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAA+CAIAAABxznhHAAAD60lEQVR4nO2ay1baQBjHeZLu3LnzAfICLn0SPcWj4nHfWrW1FXpU7AUfoKXaWmvTi0Kt3G+92BVkFBU3ttUKJ/N1MYBALmRCEiCZ3/kvZDLkDL98fswhcQ0MDv2+hr28SPIyItzxv7i4uAA50gU8Grj0+LOTK+neicefHQ1cpgtYds1dx0WleD2Mp1YzFi9RCx5/NhASu70KeVwDg0N/riGUF0mC7RRPLKcsXqIWJlfSDlLscrk0jivN1AFTLH/IWYrDeTFsvuL6BFl0fgIA6CPF4bwYjAh3TVZMNQ0AOI5rvBIcx0nn9IPigkgSjFIrVqpKlfKsD2oRzfN849l4npfOsbni1jMqf901mqXqEvVCli1h6AvFXwoiyauoMNuBYiLL8E1FvZBlSxiY4paj6iNKcBynVMLQF4r3CyLJRgeKG32ptGB9Owqe55VKGPpAcRn2BZFkIybMrpmrWH1EH45QrEWfoxV/FUSSzZhwj1Kxyr95yy4ClLtEh677QjEm2YwhWsW9AFNsOr2u+G8ZDgR8oE0x+72YlppihElex9CcsmJy12N6LefxZ3sn02u5Xr/r0aQ4juaeKCoGgJGZ3XFfrOs3kxoz7ouNzOxaaY0KasVub/TWAvRaxn0xK61RUVUcQZjkTTvFE8sp9U8LoHVcaaaOTK6krfGlA+sUSw+pzLSh4ijCJFtxNG+a4voEWeyu+AiTbMXR/FNzFRtewvZX3BYVv7JH7ak4doRJ3sbRgjlVTFC6KkzxDeqKAdpYNqldMMVMcRniR5hkuwPFAPJ/Sy+ALHZXfIxJthOmK3ZqFXesGDTo0zJiT8WXZUgcY5J3CXRf16ZNyTs0789UYIqrtN20dSV9oDh5jEl2EugBU2woNcVFnCzWFD9jio2kWXER7ySZYoPRo9jK9WmkDxSniphkJ4kWO1Zs1AMo2rG5Yo3P+LQ8lWL4oyqdvN1UjKliLc8DSh8Lkp5BNz2vuALpE0zyPoUWn+tsFFKbsoMOVZw5wSR8Cj00U7HsHOlLWmyuWHsvhmbFTurFHVextGxVvDuxUVxVIHuKST6k0SO9jaJ6Rqa4GYMVK7Va6SHHKc6dYpKPuhQrbRtArvm2jMu+pMXmiqn2ao0THPR1d1WBb2eY5FMGLQX0NArZzqC9bJniG9jPQLRUFX8/wySfM8jLFBsKU2w6VcU/SphkN4u862qKby8dWLk+jbiXIt1egiLUiofHgm5vZGo10ztxeyPDY0ErrVHhGhgc+leBnyVMspdFPlXFDFqYYtOpKj48xyShHHrMFBsKU2w6VcW/zvFhSTwsiaGswBQbS62KSyKxzBQbzo1iVsUm8R+Xt6pgwYSsZAAAAABJRU5ErkJggg==" alt="" />

the django travel three[form表单验证]的更多相关文章

  1. 第三百一十一节,Django框架,Form表单验证

    第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...

  2. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

  3. Django基础之Form表单验证

    Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...

  4. 九 Django框架,Form表单验证

    表单提交 html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

  6. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  7. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  8. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  9. web框架-(六)Django补充---form表单验证

    一.form表单验证 1. 常规html页面的form表单验证 常规页面中,如果想实现对表单中用户输入信息的数据验证,需要配合Ajax来实现. 使用前我们先来熟悉下函数参数:request,其中包含的 ...

随机推荐

  1. php excel原理

  2. 用struct模块解决tcp的粘包问题

    服务器端程序 import struct import socket sk = socket.socket() sk.bind(('127.0.0.1',9000)) sk.listen() conn ...

  3. SQL事务在存储过程的应用

    -- ============================================= -- Author: jf_ou -- Create date: 2017-08-22 -- Desc ...

  4. Spring Boot—16日志设置

    application.properties # server.address=0.0.0.0 server.port=8080 server.servlet.context-path=/test s ...

  5. 应用ArcGIS Server JavaScript API实现地图卷帘效果实现

    var maskDynamicMapServiceLayer = null; var maskDynamicMapServiceLayerDiv = null; var pointNumb = 0; ...

  6. arcgis JavaScript 加载 mapbox地图

    mapbox 地图现在是越来越好看了, 随便试 /** * Created by Administrator on 2018/5/15 0015. */ import * as esriLoader ...

  7. memcached 的 SockIOPool 概念

    池的概念 SockIOPool 首先来看下属性 SockIOPool属性 boolean initialized = false – 初始化是否完成的标志,只有初始化完成后上层才能正常使用池 int ...

  8. 微信小程序接入腾讯云IM即时通讯(会话列表)

    会话列表功能概述: 登录 :先用自己的账号登录腾讯云: 获取会话列表 :登录之后再获取会话列表: 更新未读消息数量 :获取会话列表之后更新未读消息数量 WXML代码(自己写的将就看一下) <vi ...

  9. CSS 颜色 字体 背景 文本 边框 列表 display属性

    1  颜色属性 <div style="color:blueviolet">ppppp</div> <div style="color:#f ...

  10. python读取shp

    sf = shapefile.Reader("res2_4m.shp") records = sf.records() print sf.fields for record in ...