python - 在我的表单中使用 MultipleFileField() 时,FileRequiredValidator() 不起作用
问题描述
我的 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
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 %}
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():
使用 VS 的调试工具,我发现 form.validate_on_submit() 不起作用并且总是验证失败,并且我在我的 html 页面上收到此错误。
{'roomImage': ['文件为空!']}
还有另一个 MultipleFileField 控件,其代码几乎完全相同。当我使用 FileField 上传一个文件时,不会发生此问题。这方面的文档非常有限,我所要做的就是这个。我真的不知道如何解决这个问题。我已经广泛搜索以查找涉及 MultipleFileField 的示例,但它们没有使用任何验证。我在 Github 上找不到的一个线程建议使用 OptionalValidator,但这对我来说不是一个选项,甚至没有用。有人可以建议我一个解决方案吗?
编辑:
甚至 FileAllowed() 验证器似乎也不起作用。
解决方案
这对我有用(在 GitHub 上的“字里行间”中找到):
multi_file = MultipleFileField("Upload File(s)", validators=[DataRequired()])
然而
FileAllowed(["xml", "jpg"])
被忽略,对我不起作用。
编辑:不,可悲的是,它不起作用......它返回 True forform.validate()
和 forform.validate_on_submit()
但是当你没有传递任何文件时,通过删除
required=""
从
<input id="multi_file" multiple="" name="multi_file" required="" type="file">
并提交一个表单,它仍然将其评估为 True。
所以问题仍然存在,如所述......
推荐阅读
- javascript - 如何过滤元素然后设置条件
- java - Java,获取当前屏幕的窗口边界
- magento - 在自定义模块 Magento2.4.0 中出现奇怪的错误
- machine-learning - 我们应该在训练/测试拆分之前还是之后预处理文本数据?
- html - Css 文件未在浏览器中加载
- python - Python中的重新加权(rake)
- oracle - 更新视图架构
- php - 在codeigniter中从数据库中获取json存储数据
- angular - 登录后如何在没有 location.reload() 的情况下使用角度路由器重新加载组件?
- postgresql - Helm Postgres 密码认证失败