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使用内置json模块解析json格式数据的方法
Jul 20 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
使用django实现一个代码发布系统
Jul 18 Python
python3 map函数和filter函数详解
Aug 26 Python
django中瀑布流写法实例代码
Oct 14 Python
Pytorch释放显存占用方式
Jan 13 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
python实现简单的五子棋游戏
Sep 01 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
python通过opencv调用摄像头操作实例分析
Jun 07 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
yum命令安装php7和相关扩展
2016/07/04 PHP
js 火狐下取本地路径实现思路
2013/04/02 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
浅谈javascript 函数属性和方法
2015/01/21 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python3.5安装python3-tk详解
2019/04/26 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
详解Python模块化编程与装饰器
2021/01/16 Python
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
公司活动策划方案
2014/01/13 职场文书
交通事故私了协议书
2014/04/16 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server