详解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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
python的pip安装以及使用教程
Sep 18 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Python3安装pip工具的详细步骤
Oct 14 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
python topk()函数求最大和最小值实例
Apr 02 Python
python3实现飞机大战
Nov 29 Python
python 制作网站小说下载器
Feb 20 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP加密解密实例分析
2015/12/25 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
python清除字符串里非字母字符的方法
2015/07/02 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
详解python中的异常捕获
2020/12/15 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
计算机网络专业推荐信
2013/11/24 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
机器人瓦力观后感
2015/06/12 职场文书
休假证明书
2015/06/24 职场文书
校园安全学习心得体会
2016/01/18 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server