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

Поле формы FileField

Поле FileField применяется в классе формы Flask-WTF и создаёт поле для загрузки одного файла. При отправке формы браузер передаёт файл на сервер, а само поле хранит объект файла, который можно прочитать или сохранить на диск. Первым параметром передаётся подпись поля, которая отображается рядом с кнопкой выбора файла.

Синтаксис

from wtforms import FileField field = FileField(label, [validators])

Пример

Давайте создадим форму с полем FileField и выведем её на странице:

from flask import Flask, render_template, request from flask_wtf import FlaskForm from wtforms import FileField, SubmitField app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UploadForm(FlaskForm): file = FileField('Файл') submit = SubmitField('Загрузить') @app.route('/', methods=['GET', 'POST']) def index(): form = UploadForm() if form.validate_on_submit(): f = form.file.data return f.filename return render_template('index.html', form=form)

Теперь создадим шаблон для вывода формы:

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

После выбора файла 'article' и отправки формы результат выполнения кода будет следующим:

"article"

Пример

Давайте сохраним загруженный файл на диск с помощью метода save:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import FileField, SubmitField app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UploadForm(FlaskForm): file = FileField('Файл') submit = SubmitField('Загрузить') @app.route('/', methods=['GET', 'POST']) def index(): form = UploadForm() if form.validate_on_submit(): f = form.file.data f.save('uploads/' + f.filename) return 'saved' return render_template('index.html', form=form)

Результат выполнения кода после успешной загрузки:

"saved"

Пример

Давайте добавим валидатор FileAllowed, чтобы разрешить загрузку только изображений:

from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import FileField, SubmitField from flask_wtf.file import FileAllowed app = Flask(__name__) app.config['SECRET_KEY'] = 'abcde' class UploadForm(FlaskForm): file = FileField('Файл', validators=[FileAllowed(['jpg', 'png'])]) submit = SubmitField('Загрузить') @app.route('/', methods=['GET', 'POST']) def index(): form = UploadForm() if form.validate_on_submit(): f = form.file.data f.save('uploads/' + f.filename) return 'saved' return render_template('index.html', form=form)

Теперь при попытке загрузить файл 'abcde.txt' форма не пройдёт валидацию, а в атрибуте errors появится сообщение об ошибке:

{'file': ['File type not allowed']}

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

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