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入门篇之字符串
Oct 17 Python
python单元测试unittest实例详解
May 11 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python__name__原理及用法详解
Nov 02 Python
Python数据可视化:泊松分布详解
Dec 07 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python中有帮助函数吗
Jun 19 Python
python中np是做什么的
Jul 21 Python
Python字节单位转换(将字节转换为K M G T)
Mar 02 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP实现变色验证码实例
2014/01/06 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
js获取域名的方法
2015/01/27 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python 反向输出字符串的方法
2018/07/16 Python
python线程中的同步问题及解决方法
2019/08/29 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
办公室规章制度范本
2015/08/04 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
python 爬取吉首大学网站成绩单
2021/06/02 Python