详解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数组条件过滤filter函数使用示例
Jul 22 Python
python字典基本操作实例分析
Jul 11 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
python实现FTP服务器服务的方法
Apr 11 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
Python实现打乒乓小游戏
Sep 25 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
ExtJS 入门
2010/10/29 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
如何用python整理附件
2018/05/13 Python
关于python写入文件自动换行的问题
2018/06/23 Python
Python list与NumPy array 区分详解
2019/11/06 Python
python操作gitlab API过程解析
2019/12/27 Python
python3.8下载及安装步骤详解
2020/01/15 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
django使用graphql的实例
2020/09/02 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
师德标兵事迹材料
2014/12/19 职场文书
金秋助学感谢信
2015/01/21 职场文书
运动与健康自我评价
2015/03/09 职场文书
筑梦中国心得体会
2016/01/18 职场文书
护士医德医风心得体会
2016/01/25 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL
html5调用摄像头截图功能
2022/01/18 Javascript
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏