解决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切片知识解析
Mar 06 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
Django重置migrations文件的方法步骤
May 01 Python
Python当中的array数组对象实例详解
Jun 12 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
jQuery的deferred对象使用详解
2011/08/20 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
python读取Android permission文件
2013/11/01 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
英国网上花店:Bunches
2016/11/29 全球购物
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
小学教师师德反思
2014/02/03 职场文书
工地安全质量标语
2014/06/07 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
小学三年级作文之写景
2019/11/05 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS