FileAllowed 不显示错误消息

Kon*_*sch 3 python flask wtforms flask-wtforms

我正在使用 WTForms。我正在对文件上传应用验证,并将其限制为仅 jpg、png 和 pdf 格式。但是,如果我输入不正确,则不会出现错误消息。

我遵循了本教程 https://flask-wtf.readthedocs.io/en/stable/form.html

photo = FileField('photo', validators=[
        FileRequired(),
        FileAllowed(['png', 'pdf', 'jpg'], "wrong format!")
    ])
Run Code Online (Sandbox Code Playgroud)

ars*_*sho 9

默认情况下,flask-wtf如果验证失败,不会显示任何错误消息。

\n\n

可以捕获并显示每个单独字段或所有字段的错误消息。

\n\n

下面是一个在 中进行文件上传和验证的示例flask-wtf

\n\n

文件夹结构:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 forms.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 upload.html\n
Run Code Online (Sandbox Code Playgroud)\n\n

app.py:

\n\n
from flask import Flask, render_template\nfrom forms import FileUploadForm\n\napp = Flask(__name__)\napp.secret_key = \'learnflask\'\n\n@app.route(\'/upload\', methods=[\'GET\', \'POST\'])\ndef upload():\n    form = FileUploadForm()\n    if form.validate_on_submit():\n        f = form.photo_or_pdf_file.data\n        return f.filename\n    return render_template(\'upload.html\', form=form)\n
Run Code Online (Sandbox Code Playgroud)\n\n

forms.py:

\n\n
from flask_wtf import FlaskForm\nfrom wtforms import SubmitField\nfrom flask_wtf.file import FileField, FileAllowed, FileRequired\n\n\nclass FileUploadForm(FlaskForm):\n    photo_or_pdf_file = FileField(\'photo\', validators=[\n        FileRequired(),\n        FileAllowed([\'png\', \'pdf\', \'jpg\'], "wrong format!")\n    ])\n    submit = SubmitField(\'Upload\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

templates/upload.html:

\n\n
<!DOCTYPE html>\n<html lang="en">\n<head>\n    <meta charset="UTF-8">\n    <title>login</title>\n    <style>\n        .validation_error{\n        color: red;\n    }\n    </style>\n</head>\n<body>\n<form method="POST" enctype="multipart/form-data">\n    {{ form.csrf_token }}\n    {{ form.photo_or_pdf_file.label }}<br>{{ form.photo_or_pdf_file }}\n    <span class="validation_error">{{ \', \'.join(form.photo_or_pdf_file.errors) }}</span><br>\n    {{ form.submit }}<br>\n</form>\n</body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
    \n
  • 对于无效的文件格式(音频文件):
  • \n
\n\n

在此输入图像描述

\n\n
    \n
  • 对于有效的文件格式(.png 格式)
  • \n
\n\n

有效上传

\n\n

requirements.txt:

\n\n
Click==7.0\nFlask==1.0.3\nFlask-WTF==0.14.2\nitsdangerous==1.1.0\nJinja2==2.10.1\nMarkupSafe==1.1.1\npkg-resources==0.0.0\nWerkzeug==0.15.4\nWTForms==2.2.1\n
Run Code Online (Sandbox Code Playgroud)\n\n

运行应用程序:

\n\n
export FLASK_APP=app.py\nexport FLASK_ENV=development\nflask run\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考:

\n\n\n