详解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迭代器和生成器介绍
Mar 06 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
django Admin文档生成器使用详解
Jul 22 Python
python画蝴蝶曲线图的实例
Nov 21 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 Python
Python OpenGL基本配置方式
May 20 Python
使用scrapy实现增量式爬取方式
Jun 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python 多维List创建的问题小结
2019/01/18 Python
python多线程并发实例及其优化
2019/06/27 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python小项目之五子棋游戏
2019/12/26 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python 面向对象部分知识点小结
2020/03/09 Python
python实现处理mysql结果输出方式
2020/04/09 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
餐饮投资计划书
2014/04/25 职场文书
艺术教育实施方案
2014/05/03 职场文书
建筑工地标语
2014/06/18 职场文书
2014年征兵标语
2014/06/20 职场文书
2015政治思想表现评语
2015/03/25 职场文书
校运会加油稿大全
2015/07/22 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python