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() 验证器似乎也不起作用。
这对我有用(在 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。
所以问题仍然完全存在,正如所描述的......