12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法

一、contentType参数

1、用来标识请求的数据格式

2、默认值: "application/x-www-form-urlencoded"   代表是urlencoded编码格式

   就是"user=alex&pwd=123"这样的格式,这也就是原始数据的格式

注意:

》》》1、request.POST和request.GET都是由django根据request.body转化而来的,我们可以直接用get方法取值,request.body中存储的就是原始数据,也就是urlencoded格式的数据

》》》2、django只会将默认格式的原始数据转换为.POST  .GET类型,其它格式不会进行转换,所以我们只能从request.body中取

3、还有另一种数据格式: application/json  封装成json字符串,这种格式我们就只能从request.body中取值处理 

 

 

二、ajax的csrf跨域请求处理

我们之前是采用构造数据时把csrf的name和value构成键值对放在data中,下面这种方式是从浏览器中取出cookie中存储的csrf的value值,也就是一个随机字符串

注意:csrf中间件在检测的时候也会默认解析urlencoded格式的数据,别的格式会抛出forbidden异常

怎么处理:

<script src="{% static 'js/jquery.cookie.js' %}"></script>    引入jquery.cookie.js文件

$.ajax({                                 

 
headers:{"X-CSRFToken":$.cookie('csrftoken')},    构造请求头,
 
})

 

三、serialize方法

1、应用在当form表单中的数据特别多时,键值对很多时,就用serialize方法序列化表单数据,但是serialize()函数不会序列化带有name的按钮控件

2、使用

data:$("form").serialize()   就是把form表单中所有的键值对都发给服务端,这就必须要求form表单中的标签都有name属性值

data:$(":text, select, :checkbox").serialize()  这是将表单中部分标签的键值都发给服务端

这样就不用我们一个个的构造了,但是要注意这种方法使用时一定要记得加上csrf防止跨域请求的键值对,否则会报错forbidden

 

posted @ 2017-12-12 20:20  九二零  阅读(157)  评论(0编辑  收藏  举报