解决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获取beautifulphoto随机某图片代码实例
Dec 18 Python
Python 实现随机数详解及实例代码
Apr 15 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python3.5字符串常用操作实例详解
May 01 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
python实现扫雷游戏的示例
Oct 20 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
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
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
php导出生成word的方法
2015/12/25 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
js 分栏效果实现代码
2009/08/29 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
物流专业大学生的自我鉴定
2013/11/13 职场文书
保护环境建议书400字
2014/05/13 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL