📅  最后修改于: 2023-12-03 15:00:46.751000             🧑  作者: Mango
在开发 Web 应用程序时,多数情况下都需要支持文件上传功能。在 Flask 中,我们可以使用 Flask-WTF 中的 FileField
类来实现文件上传功能。本篇文章将向你展示如何使用 Flask 和 Flask-WTF 来实现文件上传功能。
首先,我们需要安装 Flask-WTF 扩展。在终端中输入以下命令:
pip install Flask-WTF
接下来,我们需要先创建一个 Flask 应用:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your secret key'
其中,Flask
是 Flask 框架的核心类,render_template
用于渲染 HTML 模板,FlaskForm
是 Flask-WTF 中的表单基类,FileField
和 FileRequired
用于处理文件上传。
接下来,我们需要创建一个表单类,代码如下:
class MyForm(FlaskForm):
file = FileField(validators=[FileRequired()])
其中,FileField
表示一个上传文件的表单字段,validators=[FileRequired()]
表示上传文件是必须的。
接下来,我们需要在 Flask 中创建一个视图函数,用于处理文件上传:
@app.route('/', methods=['GET', 'POST'])
def upload_file():
form = MyForm()
if form.validate_on_submit():
f = form.file.data
f.save('uploads/' + f.filename)
return '文件上传成功'
return render_template('index.html', form=form)
其中,form = MyForm()
创建表单实例,if form.validate_on_submit()
判断当表单提交时,执行文件上传操作,f.save('uploads/' + f.filename)
将上传的文件保存到指定目录中。
最后,我们需要创建一个 HTML 模板,用于呈现表单和展示上传文件成功信息:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传示例</title>
</head>
<body>
<h1>文件上传示例</h1>
<form action="/" method="POST" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.file }}
<button type="submit">上传</button>
</form>
</body>
</html>
其中,enctype="multipart/form-data"
表示表单中包含二进制数据,{{ form.csrf_token }}
用于生成 CSRF 令牌,以防止跨站点请求伪造攻击。
最后,我们输入以下命令启动 Flask 应用:
flask run
在浏览器中输入以下网址:
http://127.0.0.1:5000/
上传文件即可。
在本文中,我们学习了如何使用 Flask 和 Flask-WTF 扩展来实现文件上传功能。通过上述步骤,你可以轻松地在你的 Flask 应用程序中支持文件上传功能。