Хочу добавить на страницу 2 формы flask wtfroms. Для этого создал специальные классы описывающие их.
class UpdateAvatarForm(FlaskForm):
avatar = FileField('Выберите файл', validators=[FileAllowed(['jpg', 'png', 'jpeg'], 'Только картинки!!'), FileRequired('Файл не выбран') ])
submit2 = SubmitField('Загрузить')
class AddPostForm(FlaskForm):
text = TextAreaField('Введите текст поста', validators=[DataRequired(), Length(min=10, max=500, message='Минимум 10, максимум 140 символов')])
postimg = FileField('Выберите файл', validators=[FileAllowed(['jpg', 'png', 'jpeg'], 'Только картинки!!'), FileRequired('Файл не выбран') ])
submit1 = SubmitField('Запостить!')
После чего создал 2 экземпляра в функции представления и отрисовал в шаблоне.
Суть первой формы в обновление аватарки, а второй, что бы добавлять посты. Первая форма работает адекватно. А во второй постоянно ругается валидатор, что нет загруженного файла. Даже когда выбираю файл не того формата выдаёт ошибку нет файла.
Функция представления
@app.route('/user/<username>', methods=['POST', 'GET'])
def user(username):
user = User.query.filter_by(username=username).first_or_404()
form = AddPostForm()
form_update_avatar = UpdateAvatarForm()
if form_update_avatar.submit2.data and form_update_avatar.validate():
file = form_update_avatar.avatar.data
file.save(app.root_path + f'/uploads/{file.filename}')
with open(app.root_path + f'/uploads/{file.filename}', 'rb') as img:
img = img.read()
current_user.update_avatar(img)
db.session.commit()
return redirect(url_for('user', username=current_user.username))
if form.submit1.data and form.validate():
post = Post(body=form.text.data, author=current_user)
db.session.add(post)
db.session.commit()
flash('Пост успешно добавлен', category='success')
return redirect(url_for('user', username=current_user.username))
if request.args.get('action') == 'delete':
if request.args.get('user') and request.args.get('id'):
if request.args.get('user') == current_user.username:
post = Post.query.filter_by(id=request.args.get('id')).first_or_404()
db.session.delete(post)
db.session.commit()
return redirect(url_for('user', username=user.username))
return redirect(url_for('user', username=user.username))
return redirect(url_for('user', username=user.username))
return render_template('user.html',
form=form,
form_update_avatar=form_update_avatar,
menu=Menu.query.all(),
user=user
)