解决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实现rsa算法代码
Feb 17 Python
详解Python中的变量及其命名和打印
Mar 11 Python
利用Python抓取行政区划码的方法
Nov 28 Python
Python复数属性和方法运算操作示例
Jul 21 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python实现键盘控制鼠标移动
Nov 27 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
python解析含有重复key的json方法
Jan 22 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
python的help函数如何使用
Jun 11 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP文件上传实例详解!!!
2007/01/02 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
开发Vue树形组件的示例代码
2017/12/21 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
python怎么判断素数
2020/07/01 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
经典婚礼主持词
2014/03/13 职场文书
城市创卫标语
2014/06/17 职场文书
求职信的正确写法
2014/07/10 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
个人催款函范文
2015/06/24 职场文书