解决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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Python中的Numpy矩阵操作
Aug 12 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
python实现一个简单的ping工具方法
Jan 31 Python
python中update的基本使用方法详解
Jul 17 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Python实现名片管理系统
Feb 14 Python
Python实现汇率转换操作
May 03 Python
Python不支持 i ++ 语法的原因解析
Jul 22 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实现的生成静态HTML速度快类库
2007/03/31 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
document.all还是document.getElementsByName?
2006/07/21 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
Python随机读取文件实现实例
2017/05/25 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Python IDLE清空窗口的实例
2018/06/25 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python 字符串追加实例
2019/07/20 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
设计师大码女装:11 Honoré
2020/05/03 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
优秀共产党员先进事迹
2014/01/27 职场文书
房屋租赁协议书
2014/10/18 职场文书
英语邀请函范文
2015/02/02 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python