Я кодирую обновление настроек учетной записи, следуя руководству, но когда я загружаю изображение через форму в моем веб-приложении, ничего не появляется. Он просто перенаправляет меня на ту же страницу, но в папке изображений нет нового изображения, и поле базы данных image_file остается прежним.
Это мой путь к приложению: https://i.imgur.com/PpTcP9l.png
Это мой внутренний код для этого:
def save_picture(form_picture):
random_hex = secrets.token_hex(8)
_, f_ext = os.path.splitext(form_picture.filename)
picture_fn = random_hex + f_ext
picture_path = os.path.join(app.root_path, 'static/profile_pics', picture_fn)
form_picture.save(picture_path)
return picture_fn
@app.route('/account', methods=['GET','POST'])
def account():
notifications = Notification.query.filter_by(owner=current_user.id).all()
us = Account.query.filter_by(id=current_user.id).first()
form = UpdateAccountForm()
if form.validate_on_submit():
if form.picture.data:
picture_file = save_picture(form.picture.data)
current_user.image_file = picture_file
current_user.email = form.email.data
db.session.commit()
return redirect(url_for('account'))
elif request.method == 'GET':
form.email.data = current_user.email
image_file = url_for('static', filename='profile_pics/' + current_user.image_file)
return render_template('account.html', form=form, user=us, notifications=notifications, image_file=image_file)
Это мой код формы:
class UpdateAccountForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
picture = FileField('Carica l\'immagine di profilo', validators=[FileAllowed(['png','jpg'])])
submit = SubmitField('Aggiorna')
def validate_email(self, email):
if email.data != current_user.email:
user = Account.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError("Email già utilizzata.")
А это мой шаблон код:
{% extends "profile-base.html" %}
{% block section %}
<div class="col-lg-6">
<div class="central-meta">
<div class="editing-info">
<h5 class="f-title">Impostazioni account</h5>
<br>
<img src="{{ image_file }}">
<form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
{{ form.email() }}
<label class="control-label" for="input">Email</label><i class="mtrl-select"></i>
{% for error in form.email.errors %}
<span style="color: red";> {{ error }} </span>
{% endfor %}
<br>
{{ form.picture.label() }}
{{ form.picture() }}
{% for error in form.picture.errors %}
<span style="color: red";> {{ error }} </span>
{% endfor %}
</div>
<div class="submit-btns">
{{ form.submit(class="btn btn-info") }}
</div>
</form>
</div>
</div>
</div><!-- centerl meta -->
{% endblock section %}