По умолчанию 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](https://i.stack.imgur.com/kU6JH.png)
- Для допустимого формата файла (формат .png)
![valid upload](https://i.stack.imgur.com/nKAfY.png)
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
Справка: