问题在于用户尝试忘记密码'选项。它会为验证创建新的reset_key
,但新密钥不会更新到DB中。
@app.route('/login/forgot/', methods=['GET', 'POST'])
def forgot():
form = ResetLoginForm(request.form)
#There's no session yet. User just pointing to /login/forgot url.
if request.method == 'POST' and form.validate():
user = User.query.filter_by(email=form.email.data).first()
if not user:
flash('The username or email incorrect')
return render_template('forgot.html', form=form)
reset_key = generate_key() ## this creates a new key, but how update this key into db?
#tried something like
user.reset_key = reset_key
db.session.add(user)
db.session.commit()
#this is not working. Is it due to session is not started or something?
感谢您提供任何帮助或提示。
答案 0 :(得分:2)
这是因为User.query.filter_by(email=form.email.data).first()
将返回sqlalchemy.orm.query.Query
个对象。正如其文档所说:
查询是ORM生成的所有SELECT语句的来源, 这些都是由最终用户查询操作以及高级查询操作制定的 级别内部操作,例如相关的集合加载。它 具有生成接口,连续的呼叫返回一个新的 查询对象,前者的副本带有附加标准和 与之相关的选项。
所以你只是得到一个复制的对象,所以你的改变不会起作用;
您可以这样使用:
user = db.session.query(User).filter_by(email==form.email.data).first()
然后你可以改变user
attrs
答案 1 :(得分:0)
user = db.session.query(User).first()
解决了问题。