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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
python使用PyFetion来发送短信的例子
Apr 22 Python
Python进阶篇之字典操作总结
Nov 16 Python
老生常谈python之鸭子类和多态
Jun 13 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
python中68个内置函数的总结与介绍
Feb 24 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python爬虫教程知识点总结
Oct 19 Python
python办公自动化之excel的操作
May 23 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防盗链代码实例
2014/08/27 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
浅谈js中的bind
2019/03/18 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
Python模拟三级菜单效果
2017/09/11 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
一年级学生期末评语
2014/04/21 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers