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学习笔记:字典的使用示例详解
Jun 13 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python反射用法实例简析
Dec 22 Python
Django学习笔记之ORM基础教程
Mar 27 Python
浅谈python新式类和旧式类区别
Apr 26 Python
python实现的读取网页并分词功能示例
Oct 29 Python
Python文件操作方法详解
Feb 09 Python
python函数中将变量名转换成字符串实例
May 11 Python
Python切片列表字符串如何实现切换
Aug 06 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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从字符串创建函数的方法
2015/03/16 PHP
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
python实现简单中文词频统计示例
2017/11/08 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python中断多重循环的思路总结
2019/10/04 Python
pygame实现成语填空游戏
2019/10/29 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
团委工作总结2015
2015/04/02 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Java中API的使用方法详情
2022/04/06 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android