PythonFlask-WTF文件批量下载功能实现
Python Flask是一个基于Python的Web开发框架,而WTForms是一个用于构建Web表单的Python的库。本文将介绍如何使用Python Flask和WTForms实现一个文件批量下载功能,并提供一个使用例子。
一、安装依赖库
首先,需要确保已安装Python Flask和WTForms。可以在终端中输入以下命令进行安装(需要提前安装好pip):
pip install flask pip install wtforms
二、创建Flask应用
接下来,我们创建一个Python文件,并导入必要的模块,包括Flask和WTForms:
from flask import Flask, render_template, request, send_from_directory from wtforms import Form, MultipleFileField, SubmitField
然后,创建一个Flask应用:
app = Flask(__name__) app.config['SECRET_KEY'] = 'secret_key'
三、创建表单类
接下来,我们需要创建一个表单类,用于接收用户上传的文件:
class FileForm(Form):
files = MultipleFileField('Files')
submit = SubmitField('Download')
这个表单类包含一个MultipleFileField用于接收多个文件的上传,并有一个submit按钮用于触发下载功能。
四、创建视图函数
然后,我们创建一个视图函数,用于处理用户的请求并返回相应的页面:
@app.route('/', methods=['GET', 'POST'])
def index():
form = FileForm(request.form)
if request.method == 'POST' and form.validate():
filenames = []
for file in form.files.data:
filename = secure_filename(file.filename)
file.save(filename)
filenames.append(filename)
return render_template('download.html', filenames=filenames)
return render_template('index.html', form=form)
这个视图函数接受GET和POST请求,并在GET请求时渲染index.html模板,同时传递一个表单实例。
在POST请求时,首先验证表单的数据是否有效。如果有效,就保存所有上传的文件,并将文件名保存到一个列表中。
然后,将这个文件名列表传递到download.html模板中进行渲染,显示出下载链接。
五、创建模板
在templates目录下创建两个模板文件:index.html和download.html。
index.html模板文件的内容如下:
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>File Upload</h1>
<form method="POST" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.files }}
{{ form.submit }}
</form>
</body>
</html>
这个模板文件包含一个表单,使用POST方法提交数据,并使用enctype属性为multipart/form-data,以支持文件上传。然后,渲染表单的csrf_token字段、files字段和submit字段。
download.html模板文件的内容如下:
<!DOCTYPE html>
<html>
<head>
<title>File Download</title>
</head>
<body>
<h1>File Download</h1>
<ul>
{% for filename in filenames %}
<li>
<a href="{{ url_for('download', filename=filename) }}">{{ filename }}</a>
</li>
{% endfor %}
</ul>
</body>
</html>
这个模板文件根据传递的文件名列表,生成多个下载链接。
六、创建文件下载路由
最后,我们创建一个文件下载的路由:
@app.route('/download/<path:filename>')
def download(filename):
directory = os.getcwd()
return send_from_directory(directory, filename, as_attachment=True)
这个路由将接受一个文件名参数,并使用send_from_directory函数,从当前目录获取文件,并以附件形式返回给用户。
七、运行应用
在Python文件的最后加入以下代码:
if __name__ == '__main__':
app.run(debug=True)
然后,运行这个Python脚本,即可启动Flask应用。
八、使用例子
在浏览器中访问http://localhost:5000,即可看到一个文件上传的页面。
选择多个文件并点击上传按钮后,将跳转到下载页面,显示上传的文件列表,并提供下载链接。
点击下载链接后,即可开始下载相应的文件。
总结
本文介绍了如何使用Python Flask和WTForms实现一个文件批量下载的功能,并提供了一个完整的使用例子。你可以根据自己的需求进行修改和扩展,实现更复杂的功能。
