详解django三种文件下载方式

一、概述

在实际的项目中很多时候需要用到下载功能,如导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的子类,内部使用迭代器进行数据流传输。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Django 实现下载文件功能的示例
  • Python+django实现文件下载
时间: 2018-04-05

Django 实现下载文件功能的示例

基于Django建立的网站,如果提供文件下载功能,最简单的方式莫过于将静态文件交给Nginx等处理,但有些时候,由于网站本身逻辑,需要通过Django提供下载功能,如页面数据导出功能(下载动态生成的文件).先检查用户权限再下载文件等.因此,有必要研究一下文件下载功能在Django中的实现. 最简单的文件下载功能的实现 将文件流放入HttpResponse对象即可,如: def file_download(request): # do something... with open('file_na

Python+django实现文件下载

(1)方法一.直接用a标签的href+数据库中文件地址,即可下载.缺点:word excel是直接弹框下载,对于image txt 等文件的下载方式是直接在新页面打开. (2)方法二.在python后台对下载内容进项处理,返回内容直接弹出下载框. #后台处理函数 def downloadFile(req): filename=basePath+req.GET['url'] def file_iterator(file_name, chunk_size=512): with open(file_n

python django 实现验证码的功能实例代码

我也是刚学Python  Django不久很多都不懂,所以我现在想一边学习一边记录下来然后大家一起讨论! 验证码功能一开始我在网上找了很多的demo但是我在模仿他们写的时候,发现在我的版本上根本就不能运行起来在前端页面显示的时候是图裂,有可能是我用的Python3.5的版本和django是1.10的版本的原因,我看了晚上很多的版本都是2.7的,所以我问了很多前辈和大神,终于发现了原因的所在,好了代码我就在下面帖粗来了. 这是我的项目目录. 验证码要成功显示就必须要有一个验证码生成器,所以就要写一

python django事务transaction源码分析详解

python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少劲就是不行,现在记下要用的人少走弯路 version:Django 1.8 事务官方文档 事务中文文档里面介绍很多方法,不一一赘述,按照文档即可,下面只分析下atomic方法的源码 按照官方文档 transaction.atomic 有两种用法装饰器和上下文管理器 # atomic() 方法 # from django.db import transaction ####

python django 增删改查操作 数据库Mysql

下面介绍一下django增删改查操作: 1.view.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import HttpResponse from polls.models import Test from django.shortcuts import render # Create your views here. # 解决乱码 import sys reload(sy

python Django批量导入不重复数据

本文为大家分享了python Django批量导入不重复数据的实现代码,供大家参考,具体内容如下 程序如下: #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") ''' Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则会抛出错误 django.core.exceptions

Python django实现简单的邮件系统发送邮件功能

本文实例讲述了Python django实现简单的邮件系统发送邮件功能.分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了. 2.send_mail().send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage. 3.异常处理防止邮件头注入. 4.一定要弄懂Email backends 邮件发送后端 5.多线程的邮件

使用python Django做网页

1 .创建一个django项目使用django-admin.py startproject MyDjangoSite 参考这里 2.建立视图from django.http import HttpResponsedef hello(request):    return HttpResponse("我的第一个简单的python django项目.")3.修改urls.py 我们为urlpatterns加上一行: (r'^hello/$', hello), 这行被称作URLpattern

教你安装python Django(图文)

安装环境:python版本2.7.5 ,win7系统安装Djangohttps://www.djangoproject.com/download/ 官方下载Django-1.5.5.tar.gz1,解压后(我的目录是D:\myapp\Django-1.5.5)2,DOS命令到刚解压后的Django-1.5.5目录下执行命令 python setup.py install , 结果如下图: 说明:Django安装命令实际是将Django复制到本地Python安装目录D:\Python27\Lib\

python django使用haystack:全文检索的框架(实例讲解)

haystack:全文检索的框架 whoosh:纯Python编写的全文搜索引擎 jieba:一款免费的中文分词包 首先安装这三个包 pip install django-haystack pip install whoosh pip install jieba 1.修改settings.py文件,安装应用haystack, 2.在settings.py文件中配置搜索引擎 HAYSTACK_CONNECTIONS = { 'default': { # 使用whoosh引擎 'ENGINE': '

python+Django+apache的配置方法详解

本文实例讲述了python+Django+apache的配置方法.分享给大家供大家参考,具体如下: 下载安装xampp套件 下载mod_python-3.3.1.win32-py2.5-Apache2.2.exe 下载python-2.5.4.msi 下载Django 下载MySQL-python-1.2.2.win32-py2.5.exe 1.先安装Python-2.5.4.msi 2.安装 Django-1.1.1-final.tar.gz 解压开,然后解压到某个目录如:(D:/Dev) 在