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实现将汉字转换成汉语拼音的库
May 05 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
Python numpy 常用函数总结
Dec 07 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
numpy.linspace函数具体使用详解
May 27 Python
详解python常用命令行选项与环境变量
Feb 20 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
python3实现名片管理系统(控制台版)
Nov 29 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中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
Javascript 对象的解释
2008/11/24 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
python @property的用法及含义全面解析
2018/02/01 Python
python Opencv将图片转为字符画
2021/02/19 Python
Python中property函数用法实例分析
2018/06/04 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
pycharm快捷键汇总
2020/02/14 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
2019年.net常见面试问题
2012/02/12 面试题
中国文明网签名寄语
2014/01/18 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
2014年质检工作总结
2014/11/26 职场文书
2014全年工作总结
2014/11/27 职场文书
小学班主任事迹材料
2014/12/17 职场文书
黄山导游词
2015/01/31 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
会议通知范文
2015/04/15 职场文书
校运会新闻稿
2015/07/17 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Mysql事务索引知识汇总
2022/03/17 MySQL