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实现的多线程端口扫描工具分享
Jan 21 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
python自动化生成IOS的图标
Nov 13 Python
Python常见的pandas用法demo示例
Mar 16 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
python设置代理和添加镜像源的方法
Feb 14 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
python线程池如何使用
May 28 Python
Python 虚拟环境工作原理解析
Dec 24 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 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下过滤HTML代码的函数
2007/12/10 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
php图片缩放实现方法
2014/02/20 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
重命名批处理python脚本
2013/04/05 Python
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python中DJANGO简单测试实例
2015/05/11 Python
用Python写冒泡排序代码
2016/04/12 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
中式面点餐厅创业计划书
2014/01/29 职场文书
司机职责范本
2014/03/08 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
匿名信格式范文
2015/05/27 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL