Flask-Login引发TypeError:' bool'尝试覆盖is_active属性时,object不可调用

时间:2015-09-23 22:26:31

标签: python flask flask-login

我想在Flask-Login中修改is_active,以便用户不会始终处于活动状态。

默认值始终返回True,但我更改了它以返回banned列的值。

根据文档,is_active应该是属性。但是,内部Flask-Login代码引发:

TypeError: 'bool' object is not callable 

尝试使用is_active时。

如何正确使用is_active停用某些用户?

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    banned = db.Column(db.Boolean, default=False)

    @property
    def is_active(self):
        return self.banned
login_user(user, form.remember_me.data)

if not force and not user.is_active():
TypeError: 'bool' object is not callable

2 个答案:

答案 0 :(得分:24)

is_activeis_anonymousis_authenticated都是Flask-Login 0.3的所有属性。如果您想使用它们,请将它们视为属性,不要调用它们。如果要覆盖它们,请记住使用@property装饰它们。

# change from
current_user.is_authenticated()
# to
current_user.is_authenticated

您似乎正在阅读最新版本(0.3)的文档,但使用的是旧版本的库。版本0.3 contains a breaking change将这些属性从方法更改为属性。您应升级到最新版本的Flask-Login并将其视为属性。

通过使其is_active属性返回False来停用该用户。您想要返回列的值很好。

答案 1 :(得分:0)

重载is_active以实现自己的逻辑。

它出了什么问题?没什么IMO。这是正确的,除非您忘记使用@property装饰器

将其设为属性

在龙卷风中,它与current_user类似。