Django_文件下载

Posted yebaofang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django_文件下载相关的知识,希望对你有一定的参考价值。

 

一、小文件下载

1、视图 views.py

三种方式实现,任选其一

(1)使用HttpResponse

# 导入模块
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

(2)使用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

(3)使用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

 

2、添加路由 urls.py

配置一个下载的路径

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

 

3、模板 templates 的修改

配置一个 a 标签,跳转地址配置要跳转的下载路径(对应的视图)

<div class="col-md-4"><a href="{% url ‘download‘ %}" rel="external nofollow" >点我下载</a></div>

 

二、大文件下载

大文件需要使用迭代器优化

只需要修改 views.py 文件

from django.http import StreamingHttpResponse

def download(request):
  def file_iterator(file_name, chunk_size=512):
     with open(file_name, rb) as f:
        while True:
           c = f.read(chunk_size)
              if c:
                 yield c
               else:
                  break
   the_file_name = static/images/exam/logo.png
   response = StreamingHttpResponse(file_iterator(the_file_name))
   response[Content-Type] = application/octet-stream
   response[Content-Disposition] = attachment;filename="{0}".format(the_file_name)
   return response

 

 

 

以上是关于Django_文件下载的主要内容,如果未能解决你的问题,请参考以下文章

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

Django REST框架--认证和权限

如何在 Django 中显式重置模板片段缓存?