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在不同层级目录import模块的方法
Jan 31 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python生成器与迭代器详解
Jan 01 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
python读取文件指定行内容实例讲解
Mar 02 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
爱国主义演讲稿
2014/05/07 职场文书
承诺书模板大全
2015/05/04 职场文书
学生退学证明
2015/06/23 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
总结Python常用的魔法方法
2021/05/25 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python