在我的表单中使用 MultipleFileField() 时 FileRequiredValidator() 不起作用

Ans*_*mar 6 python validation flask python-3.x wtforms

我的 UploadForm 类:

    from app import app
    from flask_wtf.file import FileRequired, FileAllowed
    from wtforms.fields import MultipleFileField
    from wtforms.validators import InputRequired,DataRequired
  class UploadForm(FlaskForm):
     .
     .
     .
     roomImage = MultipleFileField('Room',validators=[FileAllowed(['jpg', 'png'], 'Image only!'), FileRequired('File was empty!')] )
     .
     .
     .#there are other fields here which are  not relevant to  the problem at hand
Run Code Online (Sandbox Code Playgroud)

HTML模板

{% extends "base.html" %}

{% block content %}
 <h1>Upload Your Images</h1>
<form  action="/" enctype="multipart/form-data" method="post"  >
    {{ form.csrf_token }}
    Room<br />
    {{form.roomImage()}}
    .
    .
    . <MORE THINGS THAT I HAVE EDITED OUT>
    {{form.submit()}}
    <br/>
    {% if form.errors %}
      {{ form.errors }}
    {% endif %}
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

hosts.py 运行验证检查

def upload_image():#NEEDS HEAVY FIXING
    """home page to return the web page to upload documents"""
    form = UploadForm()
    if form.validate_on_submit():
Run Code Online (Sandbox Code Playgroud)

使用 VS 的调试工具,我发现 form.validate_on_submit() 不起作用并且总是验证失败,我在我的 html 页面上收到此错误。

{'roomImage': ['文件为空!']}

还有另一个具有几乎完全相同代码的 MultipleFileField 控件。当我使用 FileField 上传一个文件时,不会发生此问题。这方面的文档非常有限,我所要做的就是这个。我真的不知道如何解决这个问题。我已经广泛搜索了涉及 MultipleFileField 的示例,但他们没有使用任何验证。我在 Github 上找不到的一个线程建议使用 OptionalValidator,但是这对我来说不是一个选项,甚至那也没有用。有人可以建议我一个解决方案吗?

编辑:

甚至 FileAllowed() 验证器似乎也不起作用。

Uro*_*nac 2

这对我有用(在 GitHub 上“字里行间”找到):

multi_file = MultipleFileField("Upload File(s)", validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

然而

FileAllowed(["xml", "jpg"])
Run Code Online (Sandbox Code Playgroud)

被忽略并且对我不起作用。

编辑:不,遗憾的是,它不起作用......它返回 True forform.validate()和 forform.validate_on_submit()但是当您不传递任何文件时,通过删除

required=""
Run Code Online (Sandbox Code Playgroud)

<input id="multi_file" multiple="" name="multi_file" required="" type="file">
Run Code Online (Sandbox Code Playgroud)

并提交表单,它仍然将其评估为 True。

所以问题仍然完全存在,正如所描述的......