详解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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
python访问类中docstring注释的实现方法
May 04 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python实现字符串格式化的方法小结
Feb 20 Python
Django实现分页功能
Jul 02 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
Python使用pdb调试代码的技巧
May 03 Python
python怎么提高计算速度
Jun 11 Python
降低python版本的操作方法
Sep 11 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
python 镜像环境搭建总结
Sep 23 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 COOKIE设置为浏览器进程
2009/06/21 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
详解python之协程gevent模块
2018/06/14 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
python3正则模块re的使用方法详解
2020/02/11 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
2014年爱国卫生工作总结
2014/11/22 职场文书
数学教师求职信范文
2015/03/20 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技