Flask中使用Flask-WTF的FileField()实现文件上传功能
发布时间:2024-01-17 12:02:06
在Flask中使用Flask-WTF的FileField()可以实现文件上传功能。首先,需要安装Flask-WTF库并导入相应的模块。
pip install flask-wtf
下面是一个文件上传的示例:
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
# 定义表单类
class UploadForm(FlaskForm):
file = FileField('选择文件', validators=[FileAllowed(['txt', 'pdf', 'png', 'jpg'])])
# 创建路由处理文件上传
@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 '文件上传成功'
return render_template('upload.html', form=form)
if __name__ == '__main__':
app.run()
在上面的例子中,我们导入了Flask、render_template、request和FlaskForm模块,以及FileField和FileAllowed类。接着,我们创建了一个Flask应用,并设置了一个秘钥以用于表单验证。
然后,我们定义了一个名为UploadForm的表单类,它包含一个FileField字段,表示文件上传字段。我们给FileField字段传递了一个描述性的标签,以及一个validators参数,用于限制上传文件的类型。在这个例子中,我们只允许上传后缀为txt、pdf、png或jpg的文件。
接下来,我们创建了一个路由'/upload',并指定了请求方法为GET和POST。在GET请求中,我们实例化了UploadForm表单类,并将它传递给HTML模板渲染。在POST请求中,我们首先验证表单是否通过form.validate_on_submit()方法。如果通过验证,我们获取上传的文件对象form.file.data,并使用save()方法保存到指定的路径(这里是'uploads/'目录下)。最后,返回一个成功上传的消息。
最后,我们通过app.run()运行应用。
在模板中,可以这样渲染表单:
<form method="POST" enctype="multipart/form-data">
{{ form.hidden_tag() }}
{{ form.file.label }}
{{ form.file }}
{{ form.submit() }}
</form>
需要注意的是,必须指定enctype="multipart/form-data"属性来确保文件正确地被编码上传。
这就是使用Flask-WTF的FileField()实现文件上传功能的示例。通过以上的代码,你可以在Flask应用中添加文件上传功能。请记得根据自己的需求调整代码中的路径和文件类型限制。
