flask第八章发送邮件确认账户多次点击链接没有提示,是为什么?

按照书中代码,到达最后一步,点击确认邮件,一切正常,但是多次点击链接,还是和第一次点击链接一样,并没有提示(‘you have confirmed your account’)
代码如下:
class User(UserMixin, db.Model):

__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
confirmed = db.Column(db.Boolean,default=False)

def confirm(self, token):
    s = Serializer(current_app.config['SECRET_KEY'])
    try:
        data = s.loads(token)
    except:
        return False
    if data.get('confirm') != self.id:
        return False
    self.confirmed = True
    db.session.add(self)
    return True
    

#下面是view.py中的部分代码

@auth.route('/confirm/<token>')
@login_required
def confirm(token):

if current_user.confirmed:
    return redirect(url_for('main.index'))
if current_user.confirm(token):
    flash('You have confirmed your account. Thanks')
else:
    flash('The confirmation link is invalid or has expired')
return redirect(url_for('main.index'))

想请教各位应该如何修改,才能执行第二个if语句,使其提示‘已确认’?

阅读 3k
1 个回答

执行第二个语句的前提是:你current_user的conofirmed属性,在数据库中是False的
所以理论上你只要confirmed属性是False的情况下,会自动触发第二个if
不过我不知道你现在点击确认连接之后,转到的是哪个页面呢?
最好把你点击token之后转到的页面,截个图放上来,这样比较直观

PS:
补充给楼主,关于删除用户的方法
1:用软件比如sqlite expert打开数据库暴力删除
2:如下图
使用python 你的程序名.py shell 进入命令行模式
可以先查出你的用户,我自己数据库就建了一个进行测试
找到用户后,可以以列名username通过filter_by删选出来后,赋值给变量a
然后通过db.session.delete(a)及db.session.commit()来执行数据库的动作。
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进