我的 html 按钮没有更新数据库 (Flaskapp) 中的数据,我的代码有什么问题?
My html button doesn't update data in database (Flaskapp), what is wrong with my code?
所以我正在我的网络应用程序中创建和处理表单。我有一个所有用户的个人资料页面(显示他们的名字、姓氏、电子邮件等)。我正在尝试向它添加一个 'edit' 按钮,一旦他们点击它,他们就会被带到更新表单页面,在那里他们输入新的详细信息并点击更新按钮,一旦他们这样做,他们就是返回到他们的个人资料页面,但这次他们输入了新的详细信息(一个简单的编辑按钮)
我的forms.py
class更新表格是:
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 %}
我的问题是,当我在输入新详细信息后单击更新按钮时,没有任何变化 - 页面按预期返回到个人资料页面,但详细信息仍然相同 none 的新细节随处可见。
我做错了什么,我该如何解决?
检查您对 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)
所以我正在我的网络应用程序中创建和处理表单。我有一个所有用户的个人资料页面(显示他们的名字、姓氏、电子邮件等)。我正在尝试向它添加一个 'edit' 按钮,一旦他们点击它,他们就会被带到更新表单页面,在那里他们输入新的详细信息并点击更新按钮,一旦他们这样做,他们就是返回到他们的个人资料页面,但这次他们输入了新的详细信息(一个简单的编辑按钮)
我的forms.py
class更新表格是:
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 %}
我的问题是,当我在输入新详细信息后单击更新按钮时,没有任何变化 - 页面按预期返回到个人资料页面,但详细信息仍然相同 none 的新细节随处可见。
我做错了什么,我该如何解决?
检查您对 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)