解决django前后端分离csrf验证的问题


Posted in Python onFebruary 03, 2019

第一种方式ensure_csrf_cookie

这种方方式使用ensure_csrf_cookie 装饰器实现,且前端页面由浏览器发送视图请求,在视图中使用render渲染模板,响应给前端,此时这个渲染模板的视图函数上要加上这个装饰器

这种方式保证了模板返回时,前端接收到的响应中有csrftoken这个cookie,方法见代码。

以上方法并没有严格意义的前后分离,如果模板中有form表单,可以直接在模板中添加{% csrf_token %}。

第二种方式

前后完全分离,前端页面直接通过获取静态文件得到,然后直接发送ajax请求,得到csrftoken,此时需要一个视图函数来返回token值

def get_token(request):
 token = django.middleware.csrf.get_token(request)
 return JsonResponse({'token': token})

如此即可在浏览器将token值保存在cookie中,然后通过第一种方式中取得cookie的方法获取cookie。

发送ajax请求

以上方式得到csrftoken后,需要将其添加到请求头中,方法见代码

function csrfSafeMethod(method) {
 // these HTTP methods do not require CSRF protection
 return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

// 给ajax请求设置请求头x-csrftoken
$.ajaxSetup({
 beforeSend: function (xhr, settings) {
  if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
   xhr.setRequestHeader("X-CSRFToken", csrftoken);
  }
 }
});

此时,csrf验证不再成为阻碍

以上这篇解决django前后端分离csrf验证的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
python遍历小写英文字母的方法
Jan 02 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
python pytest进阶之fixture详解
Jun 27 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
Python的形参和实参使用方式
Dec 24 Python
python数字类型math库原理解析
Mar 02 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 #Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 #Python
对python中字典keys,values,items的使用详解
Feb 03 #Python
python生成带有表格的图片实例
Feb 03 #Python
对python生成业务报表的实例详解
Feb 03 #Python
使用Python快速制作可视化报表的方法
Feb 03 #Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 #Python
You might like
PHP 全角转半角实现代码
2010/05/16 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
python实现简单购物商城
2016/05/21 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
python爬取淘宝商品销量信息
2018/11/16 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
python中比较两个列表的实例方法
2019/07/04 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python使用re模块验证危险字符
2020/05/21 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
《大禹治水》教学反思
2014/04/27 职场文书
设计师求职信
2014/07/01 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
Redis Cluster 集群搭建你会吗
2021/08/04 Redis