从WTForms字段获取上传的文件

Kev*_*n Q 11 python flask wtforms flask-wtforms

在Flask文档中,文件上载示例使用<input type="file" name="file">然后request.files['file']获取文件.我正在使用WTForms FileField.如何在使用WTForms时获取上传的文件,而不是自己编写输入html?

dav*_*ism 28

request.files是一个字典,其中键是文件字段的名称.您可以使用获取WTForms字段的名称my_form.my_field.name.因此,您可以访问从该字段上传的数据request.files[my_form.my_field.name].

您可以使用Flask-WTF FileField,而不是使用WTForms FileField.它提供了一个data为您获取文件数据的属性. 这在文档中描述.

from flask import url_for, redirect, render_template
from flask_wtf import FlaskForm
from flask_wtf.file import FileField
from werkzeug import secure_filename

class UploadForm(FlaskForm):
    file = FileField()

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()

    if form.validate_on_submit():
        filename = secure_filename(form.file.data.filename)
        form.file.data.save('uploads/' + filename)
        return redirect(url_for('upload'))

    return render_template('upload.html', form=form)
Run Code Online (Sandbox Code Playgroud)
<html>
<head>
<title>Upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    {{ form.file }}
    <input type="submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)