Flask WTF上传文件报错

Flask WTF upload file error

我在尝试使用 Flask 上传文件时遇到错误 'NoneType' object has no attribute 'filename'

我正在关注 documentation,但我无法完全使用它。

class SubmitLocations(Form):
    title = TextField("Name Of Location (What do the locals call it)")
    description = TextField("Please describe the location")
    upload = FileField("Please select an image to upload")


@app.route('/add_spot/', methods=["GET","POST"])
@login_required
def add_spot():
    try:
        form = SubmitLocations(request.form)

        if request.method == "POST":
            title = form.title.data
            description = form.description.data
            f = form.upload.data
            filename = secure_filename(f.filename)
            f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

这是我的 HTML 表格

  <form method=post enctype="multipart/form-data" action="/add_spot/">
    <dl>
      {{render_field(form.title)}}
      {{render_field(form.description)}}
      {{render_field(form.upload)}}
    </dl>
    <p><input type=submit value=Submit></p>
  </form>

页面呈现得很好,我可以选择要上传的文件,但是当我提交时出现上面提到的错误'NoneType' object has no attribute 'filename'我想知道是否有人可以指出我的错误?也许我遗漏了一个关键部分?

需要注意的一点是,如果我删除文件上传部分,我可以毫无错误地提交此表单。

您似乎提交了没有文件的表单。您需要先验证表单。如果您依赖于拥有该文件,请将 FileRequired 添加到验证器。

from flask_wtf.file import FileRequired


class SubmitLocations(Form):
    # ...
    upload = FileField("Please select an image to upload", validators=[FileRequired()])


def add_spot():
    form = SubmitLocations(request.form)

    # changed this line
    if form.validate_on_submit():  
        title = form.title.data
        description = form.description.data
        f = form.upload.data
        filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))