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


Posted in Python onMay 10, 2021

环境

  • win10
  • Python:3.6.7
  • Django:2.2.7

运行效果

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

1、创建 Django 项目

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

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

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

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

Download/Download/settings.py

1.添加注册APP:down_app

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

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

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

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 lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/download/" rel="external nofollow" >下载图片</a>
</body>
</html>

运行

# 运行项目
python manage.py runserver

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

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

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

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

Python 相关文章推荐
python生成指定尺寸缩略图的示例
May 07 Python
编写Python小程序来统计测试脚本的关键字
Mar 12 Python
python3.5仿微软计算器程序
Mar 30 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
Python中的 enum 模块源码详析
Jan 09 Python
python多维数组分位数的求取方式
Mar 03 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
python RSA加密的示例
Dec 09 Python
详解Python函数print用法
Jun 18 Python
详解python的内存分配机制
May 10 #Python
python-for x in range的用法(注意要点、细节)
May 10 #Python
Django显示可视化图表的实践
python 中[0]*2与0*2的区别说明
May 10 #Python
Python超简单容易上手的画图工具库推荐
python爬虫请求库httpx和parsel解析库的使用测评
May 10 #Python
Python 中数组和数字相乘时的注意事项说明
May 10 #Python
You might like
基于php iconv函数的使用详解
2013/06/09 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php读取csc文件并输出
2015/05/21 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python实现字典的key和values的交换
2015/08/04 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
django解决跨域请求的问题
2018/11/11 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
Python爬虫与反爬虫大战
2020/07/30 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
XML文档面试题
2015/08/05 面试题
Unix如何添加新的用户
2014/08/20 面试题
机电专业体育教师求职信
2013/09/21 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
检讨书范文1000字
2015/01/28 职场文书