解决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实现定时播放mp3
Mar 29 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
Python Socket编程详细介绍
Mar 23 Python
Python之Web框架Django项目搭建全过程
May 02 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
Python补齐字符串长度的实例
Nov 15 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
python pytest进阶之fixture详解
Jun 27 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 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
推荐文章系统(一)
2006/10/09 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
原生js实现日历效果
2020/03/02 Javascript
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python自动安装pip
2014/04/24 Python
Python中除法使用的注意事项
2014/08/21 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
英文自荐信
2013/12/19 职场文书
公司中秋节活动方案
2014/02/12 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
给客户的检讨书
2014/12/21 职场文书
三年级学生评语大全
2014/12/26 职场文书
心得体会格式及范文
2016/01/25 职场文书