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中AND、OR的一个使用小技巧
Feb 18 Python
在Python中使用模块的教程
Apr 27 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
python实现Thrift服务端的方法
Apr 20 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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脚本[带参数]的方法
2010/01/22 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php实现的操作excel类详解
2016/01/15 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Python实现AI换脸功能
2020/04/10 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
大学辅导员事迹材料
2014/02/05 职场文书
小学家长评语大全
2014/04/16 职场文书
工会文体活动总结
2015/05/07 职场文书
班主任开场白
2015/06/01 职场文书
士兵突击观后感
2015/06/16 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python