web-dev-qa-db-ja.com

WTFormsフィールドからアップロードされたファイルを取得する

Flask docsでは、ファイルアップロードの例では<input type="file" name="file">、次にrequest.files['file']ファイルを取得します。 WTForms FileFieldを使用しています。入力htmlを自分で作成するのではなく、WTFormsを使用するときにアップロードされたファイルを取得するにはどうすればよいですか?

13
Kevin Q

request.filesは、キーがファイルフィールドの名前である辞書です。 WTFormsフィールドの名前はmy_form.my_field.nameで取得できます。したがって、request.files[my_form.my_field.name]を使用して、そのフィールドからアップロードされたデータにアクセスできます。

WTForms FileFieldを使用する代わりに、代わりにFlask-WTF 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)
<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>
32
davidism