详解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常用随机数与随机字符串方法实例
Apr 09 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
python入门教程 python入门神图一张
Mar 05 Python
python使用turtle绘制分形树
Jun 22 Python
Python实现最大子序和的方法示例
Jul 05 Python
pygame实现打字游戏
Feb 19 Python
python连接PostgreSQL过程解析
Feb 09 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
实例代码讲解Python 线程池
Aug 24 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将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
详解php的socket通信
2015/08/11 PHP
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
如何提高数据访问速度
2016/12/26 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
一个超级简单的python web程序
2014/09/11 Python
在Django中创建第一个静态视图
2015/07/15 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python代码中怎么换行
2020/06/17 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
事业单位人员的自我评价范文
2014/09/21 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
导游词欢迎词
2015/02/02 职场文书
内乡县衙导游词
2015/02/05 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书