详解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中time()方法的使用的教程
May 22 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python批量更改文件名的实现方法
Oct 29 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
Python函数和模块的使用总结
May 20 Python
详解numpy的argmax的具体使用
May 27 Python
python处理大日志文件
Jul 23 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 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
基于empty函数的判断详解
2013/06/17 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
python实现线程池的方法
2015/06/30 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
优秀团员个人的自我评价
2013/10/02 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
2014年安全生产责任书
2014/07/22 职场文书
法人委托书范本
2014/09/15 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
公司租房协议书范本
2014/10/08 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
实习介绍信范文
2015/05/05 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Elasticsearch 批量操作
2022/04/19 Python