Flask-WTF のファイルアップロード

メモ。というかドハマりした。


Flask-WTF を使ってファイルをアップロードする際、こうやって書いたらファイルのみ受け取れなかって ??? となった。

from flask_wtf.file import FileField


class PhotoForm(Form):
    photo = FileField('Your photo')


@app.route('/upload/', methods=('GET', 'POST'))
def upload():
    form = PhotoForm(request.form)
    if form.validate_on_submit():
        filename = secure_filename(form.photo.data.filename)
        form.photo.data.save('uploads/' + filename)
    else:
        filename = None
    return render_template('upload.html', form=form, filename=filename)

問題は

form = PhotoForm(request.form)

ここで、正しくは

form = PhotoForm()

だった orz


通常のフォームは request.form が必要だけど、ファイルアップロードの時は不要。