详解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中使用enumerate函数遍历元素实例
Jun 16 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
Django自定义manage命令实例代码
Feb 11 Python
Python实现合并excel表格的方法分析
Apr 13 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
python 正则表达式参数替换实例详解
Jan 17 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
利用Python优雅的登录校园网
Oct 21 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
Javascript实现的分页函数
2006/12/22 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
判断网页编码的方法python版
2016/08/12 Python
python数据结构之链表详解
2017/09/12 Python
python实现石头剪刀布程序
2021/01/20 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
银行职员思想汇报
2013/12/31 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
座谈会主持词
2014/03/20 职场文书
10的分与合教学反思
2014/04/30 职场文书
关于安全的演讲稿
2014/05/09 职场文书
岗位明星事迹材料
2014/05/18 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
教师年度个人总结
2015/02/11 职场文书
感恩节寄语2015
2015/03/24 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
开网店计划分析
2019/07/30 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server