详解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之深入变量和引用对象
Sep 24 Python
python随机取list中的元素方法
Apr 08 Python
python随机数分布random测试
Aug 27 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
django 自定义过滤器的实现
Feb 26 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
Python3安装pip工具的详细步骤
Oct 14 Python
pytorch 求网络模型参数实例
Dec 30 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
python中怎么表示空值
Jun 19 Python
python自动生成sql语句的脚本
Feb 24 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安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
歌唱比赛主持词
2014/03/18 职场文书
品牌转让协议书
2014/08/20 职场文书
自主招生自荐信范文
2015/03/04 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
培养联系人考察意见
2015/06/01 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
教师学习心得体会范文
2016/01/21 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis