欢迎访问宙启技术站
智能推送

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应用中添加文件上传功能。请记得根据自己的需求调整代码中的路径和文件类型限制。