失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 12月12日学习内容整理:Ajax中的contentType参数 csrf跨域请求处理 serialize方法...

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

时间:2023-06-05 14:31:02

相关推荐

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异常

怎么处理:

<scriptsrc="{% 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

如果觉得《12月12日学习内容整理:Ajax中的contentType参数 csrf跨域请求处理 serialize方法...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。