Python Django搭建文件下载服务器的实现
作者:拉灯的小手 发布时间:2021-06-04 14:37:55
标签:Django,服务器,搭建
环境
win10
Python:3.6.7
Django:2.2.7
运行效果
1、创建 Django 项目
# 创建Download项目
django-admin startproject Download
# 创建down_app app
python manage.py startapp down_app
2、修改配置文件:settings.py
Download/Download/settings.py
1.添加注册APP:down_app
2.设置模板文件路径:templates
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
# 访问: http://127.0.0.1:8000/
来源:https://blog.csdn.net/qq_38154948/article/details/112508229


猜你喜欢
- 元编程,一个听起来特别酷的词,强大的Lisp在这方面是好手,对于Python,尽管没有完善的元编程范式,一些天才的开发者还是创作了很多元编程
- 今天用scrapy爬取壁纸的时候(url:http://pic.netbian.com/4kmein...)絮叨了一些问题,记录下来,供后世
- 前言前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下:MySQL查询性能优化七种方式索引潜水MySQL查询性能优化武器之链
- 目前有三个解决办法,也是亲测有用的:第一个方法:因为之前有通过pycharm的project interpreter里的+号添加过一些库,但
- 1、列表的创建与遍历与整数和字符串不同,列表要处理一组数据。因此,列表必须通过显式的数据赋值才能生成,简单将一个列表赋值给另一个列表不会生成
- 1. 背景golang 原生 json 包,在处理 json 对象的字段的时候,是需要严格匹配类型的。但是,实际上,当我们与一些老系统或者脚
- 所有平台的Mysql下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台。一、Li
- 一、python的基础语法1.行连接的方法是最后加上一个‘\'2.注释:多行注释三引号,#行注释;三引号定义的字符串原样输出(保存原
- 使用库元素必须首先在DW中正确建立站点。 库被设计用来使重复性的工作更快、更容易并尽可能地无差错。 任
- 目录1、发送get请求2、发送post请求3、发送https请求4、文件上传5、文件下载6、timeout超时7、鉴权7.1、auth参数鉴
- 1、弹出菜单也叫上下文菜单,建立菜单并向菜单添加各种功能。2、右键监听鼠标。如右键点击,则根据位置判断弹出。3、调用Menupop方法。4、
- 当你提交一个查询的时候,MySQL会分析它,看是否可以做一些优化使处理该查询的速度更快。这一部分将介绍查询优化器是如何工作的。如果你想知道M
- 本文实例为大家分享了Tensorflow之MNIST CNN实现并保存、加载模型的具体代码,供大家参考,具体内容如下废话不说,直接上代码#
- 由于Access数据库是一种文件型数据库,所以无法跨服务器进行访问。下面我们来介绍一下如何利用SQL Server 的链接服务器,把地理上分
- 1.Mysql的逻辑架构Mysql的逻辑架构如下所示,整体分为两部分,Server层和存储引擎层。与存储引擎无关的操作都是在Server层完
- Mysql同时交换两个表的表名表重命名有两种方式,所以交换两表名也有两种方式:1 .lock tables t1 write ,t2 wri
- 问题描述在我们做项目中,常见的是横向表格,但是偶尔的需求,也会做竖向的表格。比如下图这样的竖向表格:我们看到这样的效果图,第一时间想到的是使
- 楔子我们知道python的执行效率不是很高,而且由于GIL的原因,导致python不能充分利用多核CPU。一般的解决方式是使用多进程,但是多
- 本文实例讲述了ES6 Promise对象的应用。分享给大家供大家参考,具体如下:The Promise object represents
- 先给大家讲解一下什么是kalikali是一种Linux系统,kali是专门用来渗透的,他是由back track系统演化而来的,后面结合了l