解决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 Socket实现简单TCP Server/client功能示例
Aug 05 Python
简单了解Python中的几种函数
Nov 03 Python
python中的随机函数小结
Jan 27 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
python中调试或排错的五种方法示例
Sep 12 Python
python多线程并发及测试框架案例
Oct 15 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python中base64与xml取值结合问题
Dec 22 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 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 session安全问题分析
2011/06/24 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
php中session定期自动清理的方法
2015/11/12 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
简单的自定义php模板引擎
2016/08/26 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python爬虫 正则表达式解析
2019/09/28 Python
Django中的session用法详解
2020/03/09 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
EJB的几种类型
2012/08/15 面试题
法制宣传教育方案
2014/05/09 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
python 提取html文本的方法
2021/05/20 Python