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 文件和输入输出小结
Oct 09 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
Python3 Random模块代码详解
Dec 04 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
python对excel文档去重及求和的实例
Apr 18 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python实战之制作天气查询软件
May 14 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
简单的Python人脸识别系统
Jul 14 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
解析argc argv在php中的应用
2013/06/24 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python实现同时给多个变量赋值的方法
2015/04/30 Python
python实现数组插入新元素的方法
2015/05/22 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
音乐节策划方案
2014/06/09 职场文书
走近毛泽东观后感
2015/06/04 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers