Правило FileSize
Правило FileSize применяется к полям формы Flask-WTF,
которые принимают файлы. Оно проверяет размер загруженного
файла и добавляет ошибку валидации, если размер не входит
в допустимый диапазон. Первым параметром передаётся
минимальный размер в байтах, вторым - максимальный размер.
Оба параметра необязательные: можно указать только нижнюю
или только верхнюю границу.
Синтаксис
from wtforms.validators import FileSize
FileSize(min_size, max_size)
Параметр min_size задаёт минимальный размер файла
в байтах, а max_size - максимальный. Если файл
меньше min_size или больше max_size,
валидация завершится ошибкой.
Пример
Давайте создадим форму с полем для файла и ограничим размер файла диапазоном от 100 до 5000 байт:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField
from wtforms.validators import FileSize
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class UploadForm(FlaskForm):
file = FileField('file', validators=[FileSize(min=100, max=5000)])
submit = SubmitField('send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = UploadForm()
res = ''
if form.validate_on_submit():
res = 'file accepted'
else:
res = str(form.file.errors)
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы и результата:
{{ res }}
<-jinja+>Если загрузить файл размером 2000 байт, результат выполнения кода будет таким:
"file accepted"
Если загрузить файл размером 50 байт, результат выполнения кода будет таким:
"['file is too small']"
Пример
Давайте ограничим только максимальный размер файла и не будем задавать минимальный:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField
from wtforms.validators import FileSize
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class UploadForm(FlaskForm):
file = FileField('file', validators=[FileSize(max=1000)])
submit = SubmitField('send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = UploadForm()
res = ''
if form.validate_on_submit():
res = 'file accepted'
else:
res = str(form.file.errors)
return render_template('index.html', form=form, res=res)
Если загрузить файл размером 5000 байт, результат выполнения кода будет таким:
"['file is too large']"
Смотрите также
-
правило
FileRequired,
которое проверяет наличие файла в поле -
правило
FileAllowed,
которое проверяет расширение загружаемого файла -
поле
FileField,
которое принимает один файл от пользователя -
поле
MultipleFileField,
которое принимает несколько файлов сразу