Загрузка изображения не работает в flask python - PullRequest
0 голосов
/ 07 мая 2020

Я кодирую обновление настроек учетной записи, следуя руководству, но когда я загружаю изображение через форму в моем веб-приложении, ничего не появляется. Он просто перенаправляет меня на ту же страницу, но в папке изображений нет нового изображения, и поле базы данных 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 %}
...