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中实现两个字典(dict)合并的方法
Sep 23 Python
python使用marshal模块序列化实例
Sep 25 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
flask入门之表单的实现
Jul 18 Python
基于python实现地址和经纬度转换
May 19 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP四大安全策略
2014/03/12 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
python修改操作系统时间的方法
2015/05/18 Python
Python实现二叉搜索树
2016/02/03 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
简单的JAVA编程面试题
2013/03/19 面试题
运动会广播稿20字
2014/02/18 职场文书
学习普通话的体会
2014/11/07 职场文书
不同意离婚答辩状
2015/05/22 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers