Flask 从WTForms字段中获取上传的文件
在本文中,我们将介绍如何使用Flask框架从WTForms字段中获取上传的文件。Flask是一个轻量级的Python web框架,而WTForms是一个用于构建web表单的扩展库。
阅读更多:Flask 教程
1. 安装Flask和WTForms
要开始使用Flask和WTForms,首先需要安装它们。可以使用pip命令来安装这两个库:
pip install flask wtforms
2. 创建Flask应用
在代码中引入Flask和WTForms库,并创建一个Flask应用:
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
这里我们导入了Flask
类、render_template
函数、request
对象、FlaskForm
类、FileField
类和SubmitField
类。并创建了一个名为app
的Flask应用实例,设置了一个密钥供后续表单使用。
3. 创建表单
使用WTForms创建一个表单类,包含一个FileField
字段用于上传文件和一个SubmitField
字段用于提交表单。在表单类中还可以定义其他的字段,这里我们只关注上传文件的字段。
class UploadForm(FlaskForm):
file = FileField('上传文件')
submit = SubmitField('提交')
这个表单类继承自FlaskForm
,并定义了一个名为file
的FileField
字段和一个名为submit
的SubmitField
字段。
4. 创建视图函数
在Flask应用中定义一个路由和对应的视图函数,用于处理用户的请求和返回相应的结果。
@app.route('/', methods=['GET', 'POST'])
def upload_file():
form = UploadForm()
if form.validate_on_submit():
file = form.file.data
file.save('./uploads/' + file.filename)
return f'文件 \"{file.filename}\" 上传成功!'
return render_template('index.html', form=form)
在视图函数upload_file
中,我们首先实例化了之前定义的表单类UploadForm
,然后通过调用validate_on_submit()
方法来判断表单是否被提交。如果表单通过验证,我们可以通过访问form.file.data
属性来获取上传的文件对象,并使用save()
方法将文件保存到指定路径。最后返回一个上传成功的提示。
5. 创建HTML模板
为了展示表单,我们需要创建一个HTML模板文件。在templates
文件夹下创建名为index.html
的文件,并添加以下内容:
<!DOCTYPE html>
<html>
<head>
<title>上传文件</title>
</head>
<body>
<h1>上传文件</h1>
<form method="POST" enctype="multipart/form-data" action="{{ url_for('upload_file') }}">
{{ form.hidden_tag() }}
{{ form.file.label }} {{ form.file }}<br>
{{ form.submit }}
</form>
</body>
</html>
在这个模板中,我们创建了一个简单的表单,使用POST方法提交数据,并设置enctype属性为multipart/form-data
以支持文件上传。使用{{ form.hidden_tag() }}
渲染一个隐藏的CSRF令牌,这是为了增加表单的安全性。通过{{ form.file.label }}
和{{ form.file }}
渲染表单的文件上传字段和提交按钮。
6. 运行应用
设置好Flask应用、表单类和HTML模板后,就可以运行应用并在浏览器中访问。可以使用以下命令启动应用:
python app.py
7. 测试文件上传功能
当应用运行后,在浏览器中输入http://localhost:5000/
来访问应用。在表单输入框中选择一个文件,并点击提交按钮。如果文件上传成功,将会显示类似以下内容的提示:
文件 "example.txt" 上传成功!
上传的文件将会保存在项目根目录下的uploads
文件夹中。
总结
通过使用Flask和WTForms,我们可以轻松地实现文件上传的功能。在本文中,我们介绍了如何使用Flask从WTForms字段中获取上传的文件,并提供了一个完整的示例代码。希望这篇文章能够帮助你理解并应用Flask和WTForms的文件上传功能。