Django学习之文件下载

Django学习之文件下载

在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。

我们这里介绍三种Django下载文件的简单写法,然后使用第三种方式,完成一个高级一些的文件下载的方法

index.html内容如下

<div>
    <a href="{% url 'download' %}">文件下载</a>
</div>

urls.py文件内容如下:

urlpatterns = [

    url(r'^index/', views.index,name='index'),
    url(r'^download/', views.download,name='download'),

]

view视图函数的写法有一下三种:

方式1:

from django.shortcuts import HttpResponse
def download(request):
  file = open('crm/models.py', 'rb') #打开指定的文件
  response = HttpResponse(file)   #将文件句柄给HttpResponse对象
  response['Content-Type'] = 'application/octet-stream' #设置头信息,告诉浏览器这是个文件
  response['Content-Disposition'] = 'attachment;filename="models.py"' #这是文件的简单描述,注意写法就是这个固定的写法
  return response

  注意:HttpResponse会直接使用迭代器对象,将迭代器对象的内容存储城字符串,然后返回给客户端,同时释放内存。可以当文件变大看出这是一个非常耗费时间和内存的过程。而StreamingHttpResponse是将文件内容进行流式传输,数据量大可以用这个方法

方式2:

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

方式3:

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的子类,内部使用迭代器进行数据流传输。

原文地址:https://www.cnblogs.com/ciquankun/p/11711363.html

时间: 2024-10-10 13:00:15

Django学习之文件下载的相关文章

Django 学习笔记(七)数据库基本操作(增查改删)

一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.py 5.同步数据 二.安装IPython方便debug sudo apt-get install ipython3 安装成功后用python manage.py shell 会自动进入Ipython交互解释器中,没有安装Ipython只有前两行代码,只进入到Python shell 中. Python 3.5

Django学习笔记 Day One

Time:2016年01月01日21:38:55 Description: 从今天开始我开始写我的Django学习笔记,因为网络上太多太杂乱的文章,不成系统,还有就是太多的培训机构讲述的东西过于简单,没有深入讲解Django,算是自己的一个小笔记吧,主要参考的是Django1.8的官方文档,地址:www.djangoproject.com,一家之言,大神勿喷! Content: Day One. First exploration of django? 我们在Web开发过程中,常常会遇到编写重复

Django学习笔记(三)—— 模型 model

疯狂的暑假学习之 Django学习笔记(三)-- 模型 model 参考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.', # 用什么数据库管理系统 'NAME': '', # 数据库名称,如果用sqlite,要写完整路径 'USER': '', # 如果用sqlite,这个不用写 'PASSWORD': '', # 如果用sqlite,这个不用写

django学习之Model(四)MakingQuery

上一篇写到MakingQuey中的filter,本篇接着来. 10)-扩展多值的关系 如果对一个ManyToManyField或ForeignKey的表进行filter过滤查询的话,有2中方法可以用.分别是: #1 Blog.objects.filter(entry__headline__contains='Lennon', entry__pub_date__year=2008) #2 Blog.objects.filter(entry__headline__contains='Lennon')

Django学习笔记(五)—— 表单

疯狂的暑假学习之  Django学习笔记(五)-- 表单 参考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path                                 除域名以外的请求路径,斜杠开头                      "/hello/" request.get_host()                      主机名                              

django学习笔记

用的windows操作系统,真是蛋疼啊,等赚了钱,我真要买一台苹果或者换个12寸的小本,用ubuntu,所以一下命令都是windows的,真心蛋疼啊,为什么没有自动补完啊 首先,随便下个django. 然后,进入命令行,进入django的文件夹键入如下命令 django>python setup.py install 经过短时间的等待,安装完成. 然后随便建一个文件夹,比如myproject,命令行进入文件夹,然后输入如下命令,一个django项目就算建好了 myproject>django-

django学习之Model(五)MakingQuery

接着上篇. 10-一次更新多个对象 有时想要对QuerySet中的所有对象的某一个field来设定一个值,这时候可以像下边这样用update(): # Update all the headlines with pub_date in 2007. Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same') 这样使用的update()只能是没有关联关系的model或者有ForeignKey的

Django学习笔记(四)—— Admin

疯狂的暑假学习之  Django学习笔记(四)-- Admin 参考:<The Django Book> 第6章 Django 可以使用admin自动创建管理界面. 1. 配置 django-admin.py startproject 创建的项目,如果没有注解掉默认的配置,python manage.py syncdb 创建用户后,直接 http://xxxxxx/admin 输入密码即可进入. 如果修改了配置文件,保证将 django.contrib.admin 加入setting.py 中

Django 学习笔记之三 数据库输入数据

假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介绍往数据库中添加数据,django默认的是sqlite3数据库. 在建立完django_blog项目后,不要忘了把 blog 加入到 settings.py 中的 INSTALLED_APPS 中. 一.同步数据库,创建相应的表 具体的参照Django 学习笔记之二的的同步数据库. 二.数据输入 下