首页 > 解决方案 > 我的 html 按钮没有更新数据库(Flaskapp)中的数据,我的代码有什么问题?

问题描述

所以我正在我的网络应用程序中创建和处理表单。我有一个所有用户的个人资料页面(显示他们的名字、姓氏、电子邮件等)。我正在尝试向它添加一个“编辑”按钮,一旦他们点击它,他们就会被带到更新表单页面,在那里他们输入新的详细信息并点击更新按钮,一旦他们这样做,他们就会被收回到他们的个人资料页面,但这次他们输入了新的详细信息(一个简单的编辑按钮)

forms.py的更新表格课程是:

class Updateform(FlaskForm):
    email = StringField("Email", validators=[DataRequired(), Email()])
    fname = StringField("First Name", validators=[DataRequired(), Length(min=2, max=20)])
    lname = StringField("Last Name", validators=[DataRequired(), Length(min=2, max=20)])
    phoneno = StringField("Phone Number", validators=[DataRequired()])
    submit = SubmitField("Update account")

我到 html 的路线是:

@auth.route("/updateform", methods=["GET", "POST"])
def updateform():
    form = Updateform()
    if(form.validate_on_submit()):
        user: User = User.select().where(User.email == form.email.data).first()
        user.email = form.email.data
        user.fname = form.fname.data
        user.lname = form.lname.data
        user.phoneno = form.phoneno
        user.save()
        flash('Your account has been updated', 'success')
        return redirect (url_for("user.profile"))
    return render_template("user/formupdate.html", form=form)

这是更新表单((formupdate.html))的模板:

{% extends "admin-layout.html" %}

{% block content %}
<div>
    {% from "_formhelpers.html" import render_field %}
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-6 col-md-6">
                <div class="card shadow mb-4">
                    <div class="card-header py-3">
                        <h6 class="font-weight-bold text-primary">UpdateForm</h6>
                    </div>
                    <div class="card-body">
                        <div class="row">
                            <div class="col-sm-6 col-md-8">
                                <div>
                                    {{ form.hidden_tag()}}
                                    {{ render_field(form.fname, class="form-control")}}
                                    {{ render_field(form.lname, class="form-control")}}
                                    {{ render_field(form.email, class="form-control")}}
                                    {{ render_field(form.phoneno, class="form-control")}}
                                
                                    <a href="{{ url_for('user.profile')}}" class="btn btn-primary">Update form</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>




{% endblock content %}

我的问题是,当我在输入新的详细信息后单击更新按钮时,没有任何变化 - 页面按原样返回到个人资料页面,但详细信息仍然相同,并且在任何地方都看不到任何新的详细信息。

我做错了什么,我该如何解决?

标签: javascriptpythonhtmlpython-3.xflask-wtforms

解决方案


检查您的实现以user.save()获取将更新提交到数据库的调用。这是我的比较路线之一,请注意db.session.commit()

from flask import render_template, flash, redirect, url_for
from flask_login import login_required

from app import db
from app.artists import bp
from app.artists.forms import ArtistForm
from app.main.forms import EmptyForm
from app.models import Artist

@bp.route('/', methods=['GET', 'POST'])
@login_required
def overview():
    create_form = ArtistForm()
    delete_form = EmptyForm()
    if create_form.validate_on_submit():
        artist = Artist(name=create_form.name.data)
        artist.save()
        db.session.add(artist)
        db.session.commit()  # <-- persist data in database
        flash(f'Created artist {create_form.name.data}.')

        return redirect(url_for('artists.overview'))

    return render_template('artists/overview.html', artists=Artist.query.all(), create_form=create_form, delete_form=delete_form)

推荐阅读