Django前后端分离csrf token获取方式


Posted in Python onDecember 25, 2020

需求

一般Django开发为了保障避免 csrf 的攻击,如果使用Django的模板渲染页面,那么则可以在请求中渲染设置一个csrftoken的cookie数据,但是如果需要前后端分离,不适用Django的模板渲染功能,怎么来动态获取 csrftoken 呢?

Django 通过 request 请求获取 csfttoken 的方法

from django.middleware.csrf import get_token
 
def getToken(request):
  token=get_token(request)
  return HttpResponse(json.dumps({'token':token}), content_type="application/json,charset=utf-8")

使用这种方式的确可以获取csrftoken的数据,下面来写个示例来演示一下。

Django 后端获取 csrftoken 示例

在视图 views.py 设置 getToken 方法

from django.middleware.csrf import get_token
 
# 获取cstftoken
def getToken(request):
  token = get_token(request)
  return HttpResponse(json.dumps({'token': token}), content_type="application/json,charset=utf-8")

urls.py 配置URL

from django.urls import path, re_path
 
from . import views
 
urlpatterns = [
 
  # ex:/assetinfo/getToken
  path('getToken', views.getToken, name='getToken'),
  ...
]

使用 postman 测试接口,获取 csrftoken

Django前后端分离csrf token获取方式 

现在是完成了基本功能了,能否动态获取 csrftoken,但是还有一个跨域问题,假如跨域后就无法获取 csrftoken 了。

我尝试过在Django中设置跨域返回的方式,但是这是不行的,因为不同的域名使用 csrftoken 就基本失去了原来的防止 csrf 攻击的意义。

最好的方式是使用 nginx 做本机的代理,分别反向代理前端、后端的服务,然后统一提供一个域名使用,即可使用 csrftoken 了。

在 postman 设置使用 csrftoken

当想要在 postman 中使用 csrftoken,那么只需要将获取的 csrftoken 值设置到 Headers 中即可,如下:

Django前后端分离csrf token获取方式 

{"X-CSRFToken":"K6q7uqt9J8UocELWR04pw2DKd8T2LRNWjf2uQvsFBWm87Q1lJZQV1vj3pR8REzCR"}

如果不设置,那么则会出现 403拒绝报错 如下:

Django前后端分离csrf token获取方式 

到此这篇关于Django前后端分离csrf token获取方式的文章就介绍到这了,更多相关Django csrf token获取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
对python产生随机的二维数组实例详解
Dec 13 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
python能开发游戏吗
Jun 11 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python实现数据的序列化操作详解
Jul 07 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 #Python
python语言time库和datetime库基本使用详解
Dec 25 #Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 #Python
用python对excel进行操作(读,写,修改)
Dec 25 #Python
python Pexpect模块的使用
Dec 25 #Python
Python中读取文件名中的数字的实例详解
Dec 25 #Python
Python的logging模块基本用法
Dec 24 #Python
You might like
用PHP读注册表
2006/10/09 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
详解js中let与var声明变量的区别
2020/04/05 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
建筑结构施工专业推荐信
2014/02/21 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
2014年安全生产责任书
2014/07/22 职场文书
岗位工作说明书
2014/07/29 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
水知道答案观后感
2015/06/08 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python