由于我的关系数据库的工作方式,我不想从数据库中删除表来删除帐户,而是通过更改 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/