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解析xml成对应的html示例分享
Apr 02 Python
python中global与nonlocal比较
Nov 21 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python方法的延迟加载的示例代码
Dec 18 Python
python实现windows下文件备份脚本
May 27 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
django2.0扩展用户字段示例
Feb 13 Python
一些关于python 装饰器的个人理解
Aug 31 Python
python实现控制台输出颜色
Mar 02 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
python三子棋游戏
May 04 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防止伪造的数据从URL提交方法
2014/06/27 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
vue实现信息管理系统
2020/05/30 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
详细分析Python垃圾回收机制
2020/07/01 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
软件测试题目
2013/02/27 面试题
出生医学证明样本
2014/01/17 职场文书
学生打架检讨书大全
2014/01/23 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2015年人事科工作总结
2015/04/28 职场文书
2015最新婚礼主持词
2015/06/30 职场文书