FileAllowed не отображает сообщение об ошибке - PullRequest
1 голос
/ 20 мая 2019

Я использую WTForms. Я применяю проверку при загрузке файлов и ограничиваю ее только форматами jpg, png и pdf. однако, если я введу неправильный ввод, сообщение об ошибке не появится.

Я следовал этому уроку https://flask -wtf.readthedocs.io / о / стабильный / form.html

photo = FileField('photo', validators=[
        FileRequired(),
        FileAllowed(['png', 'pdf', 'jpg'], "wrong format!")
    ])

1 Ответ

1 голос
/ 20 мая 2019

По умолчанию flask-wtf не показывает никаких сообщений об ошибках, если проверка завершается неудачей.

Сообщения об ошибках могут быть перехвачены и показаны для каждого отдельного поля или для всех полей вместе.

Вот пример загрузки файла с проверкой в ​​flask-wtf.

Структура папок:

.
├── app.py
├── forms.py
├── requirements.txt
└── templates
    └── upload.html

app.py:

from flask import Flask, render_template
from forms import FileUploadForm

app = Flask(__name__)
app.secret_key = 'learnflask'

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = FileUploadForm()
    if form.validate_on_submit():
        f = form.photo_or_pdf_file.data
        return f.filename
    return render_template('upload.html', form=form)

forms.py

from flask_wtf import FlaskForm
from wtforms import SubmitField
from flask_wtf.file import FileField, FileAllowed, FileRequired


class FileUploadForm(FlaskForm):
    photo_or_pdf_file = FileField('photo', validators=[
        FileRequired(),
        FileAllowed(['png', 'pdf', 'jpg'], "wrong format!")
    ])
    submit = SubmitField('Upload')

templates/upload.html

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

Выход:

  • Для недопустимого формата файла (аудиофайл):

enter image description here

  • Для допустимого формата файла (формат .png)

valid upload

requirements.txt:

Click==7.0
Flask==1.0.3
Flask-WTF==0.14.2
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pkg-resources==0.0.0
Werkzeug==0.15.4
WTForms==2.2.1

Запуск приложения:

export FLASK_APP=app.py
export FLASK_ENV=development
flask run

Справка:

...