javascript - 我的 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 %}
我的问题是,当我在输入新的详细信息后单击更新按钮时,没有任何变化 - 页面按原样返回到个人资料页面,但详细信息仍然相同,并且在任何地方都看不到任何新的详细信息。
我做错了什么,我该如何解决?
解决方案
检查您的实现以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)
推荐阅读
- entity-framework - 实体框架:无法将找到的对象分配给我的财产
- java - 对不适用于 PDF 的应用程序的隐含意图
- python - 从 2d 创建 3 通道蒙版的 numpy 方法
- python - python shell命令管道grep没有结果
- java - RXJava2中如何每15秒重复一次操作以及如何启动和停止
- php - php解析字符串而不解码
- c# - 如何使用多个可选参数编写 Linq To Entity
- php - Mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (使用密码: NO)
- python - 如何使用 Python 数据类记录类的构造函数?
- java - NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'