详解django三种文件下载方式


Posted in Python onApril 06, 2018

一、概述

在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。

实现方式:a标签+响应头信息(当然你可以选择form实现)

<div class="col-md-4"><a href="{% url 'download' %}" rel="external nofollow" >点我下载</a></div>

方式一:使用HttpResponse

路由url:

url(r'^download/',views.download,name="download"),

views.py代码

from django.shortcuts import HttpResponse
def download(request):
  file = open('crm/models.py', 'rb')
  response = HttpResponse(file)
  response['Content-Type'] = 'application/octet-stream' #设置头信息,告诉浏览器这是个文件
  response['Content-Disposition'] = 'attachment;filename="models.py"'
  return response

方式二:使用StreamingHttpResponse

其他逻辑不变,主要变化在后端处理

from django.http import StreamingHttpResponse
def download(request):
  file=open('crm/models.py','rb')
  response =StreamingHttpResponse(file)
  response['Content-Type']='application/octet-stream'
  response['Content-Disposition']='attachment;filename="models.py"'
  return response

方式三:使用FileResponse

from django.http import FileResponse
def download(request):
  file=open('crm/models.py','rb')
  response =FileResponse(file)
  response['Content-Type']='application/octet-stream'
  response['Content-Disposition']='attachment;filename="models.py"'
  return response

使用总结

三种http响应对象在django官网都有介绍.入口:https://docs.djangoproject.com/en/1.11/ref/request-response/

推荐使用FileResponse,从源码中可以看出FileResponse是StreamingHttpResponse的子类,内部使用迭代器进行数据流传输。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用稀疏矩阵节省内存实例
Jun 27 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
Python虚拟环境项目实例
Nov 20 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
python实现k-means聚类算法
Feb 23 Python
python针对excel的操作技巧
Mar 13 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
Anaconda入门使用总结
Apr 05 #Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 #Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 #Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 #Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 #Python
python中返回矩阵的行列方法
Apr 04 #Python
python增加矩阵维度的实例讲解
Apr 04 #Python
You might like
一个PHP的QRcode类与大家分享
2011/11/13 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python实现线程状态监测简单示例
2018/03/28 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
django 多数据库及分库实现方式
2020/04/01 Python
浅谈python 类方法/静态方法
2020/09/18 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
公司新员工的演讲稿注意事项
2014/01/01 职场文书
医院感染管理制度
2015/08/05 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Java基础之线程锁相关知识总结
2021/06/30 Java/Android