解决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 FTP操作类代码分享
May 13 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
详解Python中类的定义与使用
Apr 11 Python
python使用代理ip访问网站的实例
May 07 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
python SocketServer源码深入解读
Sep 17 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python中什么是面向对象
Jun 11 Python
pandas参数设置的实用小技巧
Aug 23 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
浅谈React高阶组件
2018/03/28 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python自定义线程池实现方法分析
2018/02/07 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
pycharm快捷键汇总
2020/02/14 Python
keras中的backend.clip用法
2020/05/22 Python
python实现移动木板小游戏
2020/10/09 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
现代化办公人员工作的自我评价
2013/10/16 职场文书
培训主管的岗位职责
2013/11/23 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年植树节活动总结
2015/02/06 职场文书
element多个表单校验的实现
2021/05/27 Javascript
Win11查看设备管理器
2022/04/19 数码科技