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中requests和https使用简单示例
Jan 18 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
python实现简单的购物程序代码实例
Mar 03 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
利用Python实现自动扫雷小脚本
Dec 17 Python
python中K-means算法基础知识点
Jan 25 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
一个程序下载的管理程序(二)
2006/10/09 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
用Python抢过年的火车票附源码
2015/12/07 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
公司出纳岗位职责
2015/03/31 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android