Javascript 我的html按钮没有';t更新数据库(Flaskapp)中的数据,我的代码有什么问题?
因此,我在我的web应用程序中创建和处理表单。我有一个所有用户的个人资料页面(显示他们的名字、姓氏、电子邮件等)。我试图添加一个“编辑”按钮,一旦他们点击它,他们就会被带到更新表单页面,在那里他们输入新的详细信息并点击更新按钮,一旦他们这样做了,他们就会被带回到他们的个人资料页面,但这次他们输入了新的详细信息(一个简单的编辑按钮) 更新表单的myJavascript 我的html按钮没有';t更新数据库(Flaskapp)中的数据,我的代码有什么问题?,javascript,python,html,python-3.x,flask-wtforms,Javascript,Python,Html,Python 3.x,Flask Wtforms,因此,我在我的web应用程序中创建和处理表单。我有一个所有用户的个人资料页面(显示他们的名字、姓氏、电子邮件等)。我试图添加一个“编辑”按钮,一旦他们点击它,他们就会被带到更新表单页面,在那里他们输入新的详细信息并点击更新按钮,一旦他们这样做了,他们就会被带回到他们的个人资料页面,但这次他们输入了新的详细信息(一个简单的编辑按钮) 更新表单的myforms.py类是: class Updateform(FlaskForm): email = StringField("Email
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%}
{%来自“\u formhelpers.html”导入呈现\u字段%}
更新表单
{{form.hidden_tag()}}
{{render_字段(form.fname,class=“form control”)}
{{render_字段(form.lname,class=“form control”)}
{{render_字段(form.email,class=“form control”)}
{{render_字段(form.phoneno,class=“form control”)}
{%endblock内容%}
我的问题是,当我在输入新的详细信息后单击“更新”按钮时,没有任何变化-页面会按预期返回到配置文件页面,但详细信息仍然相同,并且任何地方都看不到任何新的详细信息
我做错了什么以及如何修复它?检查
user.save()
的实现,以获取将更新提交到数据库的调用。下面是我的一条比较路线,请注意db.session.commit()
:
从flask导入渲染模板、flash、重定向、url
从flask\u登录需要导入登录
从应用程序导入数据库
从app.artists导入bp
从app.artists.forms导入ArtistForm
从app.main.forms导入空表单
从app.models导入艺术家
@路由('/',方法=['GET','POST'])
@需要登录
def概述():
create_form=ArtistForm()
delete_form=EmptyForm()
如果创建表单。在提交()时验证表单:
艺术家=艺术家(名称=创建表单.名称.数据)
艺术家保存()
db.session.add(艺术家)
db.session.commit()#这么多的可能性。。。1) 当您单击“提交”时,浏览器是否确实发出请求?2) 服务器正在接收请求吗?3) 这是不是验证了它应该的方式?4) 它通过验证了吗?5) 它是否正在尝试更新数据库,但失败了?首先,我要检查#1,如果这不是问题,请在服务器代码中添加日志记录以查看它在做什么。与您的问题无关,但user.phoneno=form.phoneno
可能应该是user.phoneno=form.phoneno.data
(类似于上面的行)。
{% 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 %}
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)