详解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开发windows GUI程序入门实例
Oct 23 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
一张图带我们入门Python基础教程
Feb 05 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
python计算列表内各元素的个数实例
Jun 29 Python
python安装numpy和pandas的方法步骤
May 27 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
解决reload(sys)后print失效的问题
Apr 25 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 Python
Python利器openpyxl之操作excel表格
Apr 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php去除html标记的原生函数详解
2015/01/27 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
php文件上传类完整实例
2016/05/14 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python GUI编程完整示例
2019/04/04 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
国际贸易毕业生求职信范文
2014/02/21 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书