РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
310 of 643 menu

Правило FileAllowed

Правило FileAllowed применяется к полю FileField или MultipleFileField для проверки расширения загружаемого файла. Первым параметром передаётся список разрешённых расширений, вторым - сообщение об ошибке, которое увидит пользователь при неверном типе файла. Если расширение файла не входит в список, валидация завершается ошибкой.

Синтаксис

FileAllowed(upload_set, message)

Пример

Давайте создадим форму с полем для загрузки изображения и разрешим только расширения png и jpg:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import FileField, SubmitField from wtforms.validators import FileAllowed app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UploadForm(FlaskForm): image = FileField('Image', validators=[FileAllowed(['png', 'jpg'], 'Only images!')]) submit = SubmitField('Upload') @app.route('/', methods=['GET', 'POST']) def index(): form = UploadForm() if form.validate_on_submit(): return 'uploaded' return render_template('index.html', form=form)

Шаблон для вывода формы:

<form method="post" enctype="multipart/form-data"> {{ form.hidden_tag() }} {{ form.image() }} {{ form.submit() }} </form>

Если пользователь загрузит файл с расширением png или jpg, форма успешно пройдёт валидацию и вернётся строка:

uploaded

Если же расширение не входит в список, в атрибуте errors появится сообщение 'Only images!'.

Пример

Давайте разрешим несколько типов документов и выведем ошибку валидации в шаблоне:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import FileField, SubmitField from wtforms.validators import FileAllowed app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class DocForm(FlaskForm): doc = FileField('Document', validators=[FileAllowed(['pdf', 'doc', 'txt'], 'Bad format!')]) submit = SubmitField('Send') @app.route('/', methods=['GET', 'POST']) def index(): form = DocForm() res = None if form.validate_on_submit(): res = 'ok' return render_template('index.html', form=form, res=res)

Шаблон с выводом ошибок:

<form method="post" enctype="multipart/form-data"> {{ form.hidden_tag() }} {{ form.doc() }} {% for error in form.doc.errors %} <p>{{ error }}</p> {% endfor %} {{ form.submit() }} </form> {% if res %} <p>{{ res }}</p> {% endif %}

При загрузке файла с расширением pdf в шаблоне появится строка:

ok

При загрузке файла с расширением exe выведется сообщение об ошибке:

Bad format!

Смотрите также

  • правило FileRequired,
    которое проверяет, что файл был загружен
  • правило FileSize,
    которое ограничивает размер загружаемого файла
  • поле FileField,
    к которому обычно применяется это правило
  • поле MultipleFileField,
    для загрузки нескольких файлов сразу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить