解决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中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
详解Python中类的定义与使用
Apr 11 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
Python求正态分布曲线下面积实例
Nov 20 Python
python程序文件扩展名知识点详解
Feb 27 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
如何在pycharm中安装第三方包
Oct 27 Python
python import 上级目录的导入
Nov 03 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
Python中的套接字编程是什么?
Jun 21 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 静态变量与自定义常量的使用方法
2010/01/26 PHP
PHP技术开发技巧分享
2010/03/23 PHP
php数组随机排序实现方法
2015/06/13 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
讲座主持词
2014/03/20 职场文书
任命书标准格式
2015/03/02 职场文书
让世界充满爱观后感
2015/06/10 职场文书
学校财务管理制度
2015/08/04 职场文书
python pyhs2 的安装操作
2021/04/07 Python
如何使JavaScript休眠或等待
2021/04/27 Javascript