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使用logging模块实现打印log到指定文件的方法
Sep 05 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
对python 命令的-u参数详解
Dec 03 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
pandas数据处理进阶详解
Oct 11 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
numpy实现RNN原理实现
Mar 02 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 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输出Excel文件类
2010/02/08 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
laravel自定义分页效果
2017/07/23 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
原生js二级联动效果
2017/06/20 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
vue better-scroll插件使用详解
2018/01/25 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python退火算法在高次方程的应用
2018/07/26 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
家长会学生家长演讲稿
2013/12/29 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
公司聚餐通知
2015/04/22 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
解决Oracle数据库用户密码过期
2022/05/11 Oracle