解决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 相关文章推荐
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python面向对象法实现图书管理系统
Apr 19 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python3.7添加dlib模块的方法
Jul 01 Python
python操作链表的示例代码
Sep 27 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
python源码剖析之PyObject详解
May 18 Python
Python 用户输入和while循环的操作
May 23 Python
Python合并多张图片成PDF
Jun 09 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
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
产品促销活动策划书
2014/01/15 职场文书
社区活动邀请函范文
2014/01/29 职场文书
服装设计专业求职信
2014/06/16 职场文书
行政求职信
2014/07/04 职场文书
2014年会计工作总结
2014/11/27 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
停发工资证明范本
2015/06/12 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA