当前位置:
首页
文章
后端
详情

Python Django搭建文件下载服务器的实现

在我们的认知中,服务器一般都是发送请求响应的东西。但其实还有另外一种文件下载服务器,他们只负责文件的下载。这样的服务器使用Django也可以实现,那么怎么使用Django搭建一个文件下载服务器呢。来看这篇文章,小编带你了解。

环境

  • win10
  • Python:3.6.7
  • Django:2.2.7

运行效果

在这里插入图片描述

1、创建 Django 项目

# 创建Download项目
django-admin startproject Download
# 创建down_app app
python manage.py startapp down_app

在这里插入图片描述

在这里插入图片描述

2、修改配置文件:settings.py

Download/Download/settings.py

1.添加注册APP:down_app

在这里插入图片描述

2.设置模板文件路径:templates

在这里插入图片描述

3、编写视图函数:views.py

Download/down_app/views.py

import os
from django.http import HttpResponse
from django.http import StreamingHttpResponse


def image_down(request):
    """
    下载图片
    """
    img_name = request.GET.get("username") + ".png"  # 二维码图片名
    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 项目根目录
    file_path = os.path.join(base_dir, 'antirisk/CodeGenerate/image/code', img_name)  # 二维码的绝对路径

    if not os.path.isfile(file_path):  # 判断下载文件是否存在
        return HttpResponse("Sorry but Not Found the File")

    def file_iterator(file_path, chunk_size=512):
        """
        文件生成器,防止文件过大,导致内存溢出
        :param file_path: 文件绝对路径
        :param chunk_size: 块大小
        :return: 生成器
        """
        with open(file_path, mode='rb') as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    try:
        # 设置响应头
        # StreamingHttpResponse将文件内容进行流式传输,数据量大可以用这个方法
        response = StreamingHttpResponse(file_iterator(file_path))
        # 以流的形式下载文件,这样可以实现任意格式的文件下载
        response['Content-Type'] = 'application/octet-stream'
        # Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名
        response['Content-Disposition'] = f'attachment;filename="1.png"'  # 文件名不可设置为中文
    except:
        return HttpResponse("Sorry but Not Found the File")

    return response

4、修改路由配置:urls.py

Download/Download/urls.py

from django.contrib import admin
from django.urls import path, re_path
from down_app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
    re_path('download/)', views.image_down, name="download"),
]

5、创建并编写:index.html

Download/templates/index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/download/" rel="external nofollow" >下载图片</a>
</body>
</html>

运行

# 运行项目
python manage.py runserver

在这里插入图片描述

# 访问: http://127.0.0.1:8000/

在这里插入图片描述

到此这篇Python Django搭建文件下载服务器的实现的文章就介绍到这了,更多Django学习内容请搜索W3Cschool以前的文章或继续浏览下面的相关文章希望大家以后多多支持W3Cschool!


免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统