详解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解析xml模块封装代码
Feb 07 Python
python中stdout输出不缓存的设置方法
May 29 Python
详解Python中DOM方法的动态性
Apr 11 Python
详解Python中用于计算指数的exp()方法
May 14 Python
Python删除windows垃圾文件的方法
Jul 14 Python
利用Python读取文件的四种不同方法比对
May 18 Python
python生成词云的实现方法(推荐)
Jun 13 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python mock测试的示例
Oct 19 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 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
生成缩略图
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP使用递归生成文章树
2015/04/21 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
js获取div高度的代码
2008/08/09 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
单利模式及python实现方式详解
2018/03/20 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
电子工程求职信
2014/07/17 职场文书
面试自我评价范文
2014/09/17 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
金秋助学感谢信
2015/01/21 职场文书
李白故里导游词
2015/02/12 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏