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中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python模块之re正则表达式详解
Feb 03 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
深入理解Python3中的http.client模块
Mar 29 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
用于业余项目的8个优秀Python库
Sep 21 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
分享Python获取本机IP地址的几种方法
Mar 17 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
学习php中的正则表达式
2014/08/17 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
php数组和链表的区别总结
2019/09/20 PHP
javascript基本语法分析说明
2008/06/15 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
javascript时间差插件分享
2016/07/18 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
《猴子种树》教学反思
2014/02/14 职场文书
特教教师先进事迹
2014/05/21 职场文书
统计学教授推荐信
2014/09/18 职场文书
小学班长竞选稿
2015/11/20 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python