python - Flask-login is_active 不会保持更改

标签 python flask flask-sqlalchemy flask-login

由于我的关系数据库的工作方式,我不想从数据库中删除表来删除帐户,而是通过更改 is_active 函数在我的 User 类中返回的内容来停用它们。问题是我的 User 类中的属性“active”不会保持 False——每次我在停用测试帐户后尝试使用该帐户登录时,它仍然能够正常登录,并且通过我所看到的测试current_user._get_current_object().active 是 True,即使我在上次 session 中将其设置为 false。这是我的 View 函数:

@app.route('/deleteaccount', methods=['GET', 'POST'])
@login_required
def confirmdeletion():
    form = LoginForm()
    if form.validate_on_submit():
        currentuser = current_user._get_current_object()
        currentuser.active = False
        flash("Account deletion successful")
        return redirect(url_for('frontpage'))
    return render_template('login.html', form=form, delete=True)

这是我的 models.py 代码的一部分:

class User(db.Model):
user_email = db.Column(db.Text, primary_key=True)
user_password = db.Column(db.Text)
favorites = db.relationship('Performer', secondary=favorites, backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')
active = db.Column(db.Boolean)

def __init__(self, user_email, user_password):
    self.user_email = user_email
    self.user_password = user_password
    self.active = True
def __repr__(self):
    return '<User {0}>'.format(self.user_email)
def is_authenticated(self):
    return True
def is_active(self):
    return self.active
def is_anonymous(self):
    return False
def get_id(self):
    try:
        return unicode(self.user_email)
    except NameError:
        return str(self.user_email)

再一次,我的问题是 self.active 在/deleteaccount 过程中不会保持 False。我将不胜感激你的帮助。另外,这是我的第一个问题,所以如果我在这个问题中遗漏了一些重要的内容,请告诉我。谢谢。

注意:我尝试在构造函数中省略 self.active = True ,并且尝试在构造函数中定义它,同时将其保留在上面定义的位置之外,但这两种方法都不起作用。

最佳答案

您需要提交对模型所做的更改:

def confirmdeletion():
    #...
    if form.validate_on_submit():
        #...
        current_user.active = False
        db.session.commit()
        #...

关于python - Flask-login is_active 不会保持更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465549/

相关文章:

python - 如何让我的 flask-app 在我的站点子域上运行?

python - 在 Flask-SQLAlchemy 中加入后过滤

Python检测替代峰

python - 在游戏循环中处理不同对象的优雅方式?

javascript - Python Flask 日期实时更新

flask - 带有 Flask 后端的 Svelte(kit) - 一些问题

python - 如何从模型生成的表单中指定我想要的小部件(例如 TextArea 而不是简单的文本输入)? flask SQLAlchemy WTForms

python - 我可以安全地组合我的模式吗

python - 割炬安装导致此平台上的车轮不受支持

python - 在没有操作系统模块的Python中设置环境变量