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中调用ggplot的三种方法
Apr 08 Python
使用Python编写vim插件的简单示例
Apr 17 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python中%格式表达式实例用法
Jun 18 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
js实现车辆管理系统
2020/08/26 Javascript
Python学习资料
2007/02/08 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
Python中创建二维数组
2018/10/17 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
python hash每次调用结果不同的原因
2019/11/21 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
致800米运动员广播稿
2014/02/16 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
工程部文员岗位职责
2015/02/04 职场文书
医院见习总结
2015/06/24 职场文书
初中政治教学反思
2016/02/23 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python