【问题标题】:Flask-WTF FileField fails on validate_on_submitFlask-WTF FileField 在 validate_on_submit 上失败
【发布时间】:2018-03-15 13:57:54
【问题描述】:

我希望能够使用 Flask-WTF FileField 在 Flask 上上传 CSV 文件,但无法通过 validate_on_submit

这是我的看法。

@main.route('/upload', methods=['GET', 'POST'])
def upload_products():

    form = UploadForm()
    print (request.method)
    print (form.validate_on_submit())
    print (form.csv.data)
    if form.validate_on_submit():
        print ('valid on submit')
        f = form.csv.data
        print (f)
        return redirect(url_for('upload_products'))
    return render_template('upload.html', form=form)

这是我的表格

class UploadForm(FlaskForm):
    csv = FileField("")

这是我的html 文件。

<div class="container">
  <h1 class="my-4">Hello! Upload files here!</h1>
</div>
<div class="container" >
  <form action="{{ url_for('main.upload_products') }}" method="post" enctype="multipart/form-data">
      {{form.csv}}
      <input type="submit" value="Submit">
  </form>
</div>

validate_on_submit 上,我总是收到False 值。 我还打印了form.csv.data,这是我得到的结果:

<FileStorage: '12347.csv' ('application/vnd.ms-excel')>

为什么validate_on_submit 会失败?我错过了什么吗?

【问题讨论】:

  • 我猜这是 CSRF 问题。你能打印出form.errors吗?它应该说“CSRF 令牌丢失”。如果是这样,请检查此答案:stackoverflow.com/a/21501593/2644759
  • 你是对的,错误是The CSRF token is missing.

标签: python python-3.x csv flask flask-wtforms


【解决方案1】:

通过在我的模板上添加 {{form.hidden_tag()}} 解决了这个问题。

<div class="container">
  <h1 class="my-4">Hello! Upload files here!</h1>
</div>
<div class="container" >
  <form action="{{ url_for('main.upload_products') }}" method="post" enctype="multipart/form-data">
      {{form.hidden_tag()}}
      {{form.csv}}
      <input type="submit" value="Submit">
  </form>
</div>

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2012-05-30
    • 2016-10-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多