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使用arp欺骗伪造网关的方法
Apr 24 Python
python中的格式化输出用法总结
Jul 28 Python
python中装饰器级连的使用方法示例
Sep 29 Python
Windows下python3.7安装教程
Jul 31 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
Python中一些深不见底的“坑”
Jun 12 Python
python pygame实现五子棋小游戏
Oct 26 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Python实现读取并保存文件的类
2017/05/11 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
pytorch之添加BN的实现
2020/01/06 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python 用struct模块解决黏包问题
2020/11/07 Python
Python调用Redis的示例代码
2020/11/24 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
自我鉴定书范文
2013/10/02 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
2014年教师节活动总结
2014/08/29 职场文书
小学生节水倡议书
2015/04/29 职场文书