html超链接直接下载不再网页中打开,在a标签里添加 download=””,””里面的内容可随意写,比如文件名
<a href="/download/下载.pdf" download="">下载.pdfa>
from django.db import models
class UploadFile(models.Model):
title = models.CharField(verbose_name="图片标题", max_length=50)
path = models.FileField(upload_to='files/')
from django.shortcuts import render, HttpResponse
from .models import UploadFile
def upload_file(request):
if request.method == "POST":
up_file = request.FILES.get('upload_file')
UploadFile(title=up_file.name, path=up_file).save()
return HttpResponse('success')
else:
return render(request, "blog/upload_file.html")
enctype="multipart/form-data"
name="upload_file"
与request.FILES.get('upload_file')
名字对应
<form action="{% url "upload_file" %}" role="form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group text-center">
<label for="inputfile" class="col-md-2">上传文件</label>
<div class="col-md-10">
<input name="upload_file" type="file" id="inputfile">
</div>
</div>
<div style="clear: both"></div>
<p style="margin-top: 100px"><button type="submit" class="col-sm-offset-2 btn btn-primary">提交文件 </button></p>
</form>
- 指定上传文件的保存路径的根目录
[En]
specify the root directory of the save path for uploaded files*
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
from django.urls import pathfrom . import viewsurlpatterns = [ path('uploadfile/', views.upload_file, name="upload_file"),]
实现保存的文件与 request
内容相关
def upload_file(request):
if request.method == "POST":
up_file = request.FILES.get('upload_file')
UploadFile(title=up_file.name, path=up_file).save(request=request)
return HttpResponse('success')
else:
return render(request, "blog/upload_file.html")
函数默认会传入
instance
为UploadFile
实例filename
为文件名
from django.db import models
def upload_path(instance, filename):
print(instance.rq)
print(filename)
return "files/"
class UploadFile(models.Model):
title = models.CharField(verbose_name="图片标题", max_length=50)
path = models.FileField(upload_to=upload_path)
rq = None
def save(self, *args, **kwargs):
UploadFile.rq = kwargs.pop("request")
print(UploadFile.rq)
super().save(*args, **kwargs)
- 对模型添加设置与获取
request
的方法
from django.shortcuts import render, HttpResponse
from .models import UploadFile
def upload_file(request):
if request.method == "POST":
up_file = request.FILES.get('upload_file')
f = UploadFile(title=up_file.name, path=up_file)
f.set_request(request)
f.save()
return HttpResponse('success')
else:
return render(request, "blog/upload_file.html")
from django.db import models
def upload_path(instance, filename):
print(instance.get_request().method)
print(filename)
return "files/"
class UploadFile(models.Model):
title = models.CharField(verbose_name="图片标题", max_length=50)
path = models.FileField(upload_to=upload_path)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
def set_request(self, request):
self.request = request
def get_request(self):
return self.request
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
下载界面
{% for file_obj in file_list %}
<div class="row">
<a href="/upload/{{ file_obj.path }}">{{ file_obj.title }}</a>
</div>
{% endfor %}
- 保存到 media 目录,需要配置路由,
path
会自动传入serve
作为参数
from django.conf.urls import url
from django.urls import path
from django.views.static import serve
urlpatterns = [
url(r'^media/(?P.*)', serve, {"document_root": settings.MEDIA_ROOT}),
]
- 保存到 media 目录
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'upload')
]
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('uploadfile/', views.upload_file, name="upload_file"),
]
views.py
def upload_file(request):
if request.method == "POST":
up_file = request.FILES.get('upload_file')
UploadFile(title=up_file.name, path=up_file).save(request=request)
return HttpResponse('success')
else:
return render(request, "blog/upload_file.html")
models.py
class UploadFile(models.Model):
title = models.CharField(verbose_name="图片标题", max_length=50)
path = models.FileField(upload_to='attach_file/')
upload_file.html
<form action="{% url "upload_file" %}" role="form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group text-center">
<label for="inputfile" class="col-md-2">上传文件</label>
<div class="col-md-10">
<input name="upload_file" type="file" id="inputfile">
</div>
</div>
<div style="clear: both"></div>
<p style="margin-top: 100px"><button type="submit" class="col-sm-offset-2 btn btn-primary">提交文件 </button></p>
</form>
下载,直接在静态文件目录下查找对应文件,需要加入 STATICFILES_DIRS
<a style="color: #fff;" href="/static/{{ attach.file }}" download="{{ attach.title }}">下载</a>
Original: https://blog.csdn.net/sky0Lan/article/details/120550016
Author: sky0Lan
Title: django 实现文件上传并保存
相关阅读
Title: Linux环境使用Docker手工部署Flask项目
网上大部分关于Docker部署Flask项目的教程,都没告知需要在Linux环境下部署,所以会导致整个教程看下来,在windows系统实操,都是失败的。
第一步,在自己的windows系统安装个linux虚拟机。(具体教程自行网上搜索)
第二步,在linux系统安装docker
Centos安装docker的教程:Linux CentOS安装docker
Debian安装docker的教程:Debian Docker 安装
第三步,将本地创建的flask项目上传到linux,建议先在windows环境下运行,看看跑的通不。项目创建参考:
Flask搭建登录注册项目(全网最详细教程)
我是在linux下新建了一个flask01的文件夹,再把我在windows的项目内容复制过去。项目内容有:

关于Dockerfile文件,内容如下:
FROM python:3.9.2
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
解读下Dockerfile:
FROM python:3.9.2
①第一行的版本号,是linux下python的版本号,可以通过linux命令python – version查询获取。如果找不到,那么要先安装python包,安装教程自行查找。我查到我安装的版本号是3.9.2
CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
②最后一行的第一个app,是你项目的启动文件名,因为我的启动文件是app.py,所以这里就是app,如果你是其他名字,如start.py,那么这里就应该是”start:app”。第二个app表示创建的flask对象。
gunicorn.conf.py的内容如下。注意,这里我把端口设置为80
workers = 5
worker_class = "gevent"
bind = "0.0.0.0:80"
requirements.txt的内容如下。这个文件的意思就是你这个项目要导入的包。最开始照搬其他博主的,忘记根据自己的项目情况来,没有导入项目需要的pymysql,导致报错了。
gunicorn
gevent
flask
pymysql
我们要保证项目跑起来,要在linux下安装flask、gunicorn 、geven。安装又依靠pip,所以要先安装pip(linux安装pip的方式自行百度),再安装对应的包,我的系统安装的是pip3,所以命令如下:
pip3 install flask
pip3 install gunicorn
pip3 install gevent
3个包安装下来,gevent这个包会报错。可以参考这个教程修正:
pip install gevent 安装失败的解决办法
第四步,在linux运行下我们的启动文件,因为我安装的是python3,命令如下:
python3 app.py
终端出现这个界面,一般就是运行成功了,可以在linux的浏览器输入这个地址看看效果

第五步,通过gunicorn启动flask服务,输入命令:
gunicorn app:app -c gunicorn.conf.py
终端出现这个界面,一般就是运行成功了,可以在linux的浏览器输入这个地址看看效果

第六步,创建镜像
docker build -t 'zhuzhu' .
zhuzhu是镜像名,注意后面有个空格和.
验证下是否创建成功,用以下命令查看镜像:
docker images
第七步,启动容器运行docker镜像(80是前面gunicorn.conf.py设置的端口号)
docker run -d -p 3000:80 zhuzhu
第八步,推送到镜像仓库,如harbor
第九步,部署到服务器,如Rancher
另外,附上docker常用的命令
列出所有的容器,可查询到容器id
docker ps -a
停止运行中的容器
docker stop CONTAINER ID
删除容器
docker rm container_id
删除镜像
docker rmi image_id
Original: https://blog.csdn.net/lala_yanzi/article/details/123840622
Author: 林家小猪
Title: Linux环境使用Docker手工部署Flask项目
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/307870/
转载文章受原作者版权保护。转载请注明原作者出处!