详解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使用MySQLdb for Python操作数据库教程
Oct 11 Python
Python常用模块介绍
Nov 21 Python
python实现比较两段文本不同之处的方法
May 30 Python
spyder常用快捷键(分享)
Jul 19 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 Python
Python try except else使用详解
Jan 12 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
Bootstrap基础学习
2015/06/16 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
优秀辅导员事迹材料
2014/02/16 职场文书
合作经营协议书
2014/04/17 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Python&Matlab实现樱花的绘制
2022/04/07 Python