详解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标准库urllib2的一些使用细节总结
Mar 16 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
说一说Python logging
Apr 15 Python
如何将python中的List转化成dictionary
Aug 15 Python
python正则中最短匹配实现代码
Jan 16 Python
Python实现八皇后问题示例代码
Dec 09 Python
pandas.cut具体使用总结
Jun 24 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
django 扩展user用户字段inlines方式
Mar 30 Python
python的Jenkins接口调用方式
May 12 Python
Pyinstaller 打包发布经验总结
Jun 02 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验证码类ValidateCode解析
2017/01/07 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
javascript 节点遍历函数
2010/03/28 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python中split方法用法分析
2015/04/17 Python
python检测是文件还是目录的方法
2015/07/03 Python
分分钟入门python语言
2018/03/20 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
副总经理工作职责
2013/11/28 职场文书
小学国庆节活动方案
2014/02/11 职场文书
股东协议书
2014/04/14 职场文书
餐厅筹备计划书
2014/04/25 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
超市开店计划书
2014/09/15 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
2015年化验室工作总结
2015/04/23 职场文书
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android