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中的序列化存储的方法
Apr 28 Python
详解Python的Lambda函数与排序
Oct 25 Python
python实现分页效果
Oct 25 Python
Python pymongo模块用法示例
Mar 31 Python
Django Rest framework之认证的实现代码
Dec 17 Python
Python列表对象实现原理详解
Jul 01 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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
人族 TERRAN 概述
2020/03/14 星际争霸
PHP安全防范技巧分享
2011/11/03 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
搭建vue开发环境
2018/07/19 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
Python读写Json涉及到中文的处理方法
2016/09/12 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python画图高斯分布的示例
2019/07/10 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
Python里面如何实现tuple和list的转换
2012/06/13 面试题
电台编导求职信
2014/05/06 职场文书
淘宝店策划方案
2014/06/07 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
指导老师鉴定意见
2015/06/05 职场文书
教师研修随笔感言
2015/11/18 职场文书
话题作文之成长
2019/12/09 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Nginx源码编译安装过程记录
2021/11/17 Servers
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers