解决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 dict remove数组删除(del,pop)
Mar 24 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
python实现五子棋小游戏
Mar 25 Python
python识别图像并提取文字的实现方法
Jun 28 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
python 代码运行时间获取方式详解
Sep 18 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 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
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
php生成与读取excel文件
2016/10/14 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
JS实现小米轮播图
2020/09/21 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
对python Tkinter Text的用法详解
2018/10/11 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
土木工程师职业规划范文
2014/03/07 职场文书
排查整治工作方案
2014/06/09 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
会计求职自荐信范文
2015/03/04 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
Pygame Event事件模块的详细示例
2021/11/17 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers