【问题标题】:"TypeError: 'bool' object is not callable" in flask烧瓶中的“TypeError:'bool'对象不可调用”
【发布时间】:2014-10-11 09:49:04
【问题描述】:

我现在在我的flask app 的用户模型中有is_active = db.Column(db.Boolean(), nullable=False) 字段,当我登录时,我收到错误TypeError: 'bool' object is not callable

追溯

.
.
.
File "/home/environments/flask0101/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/flask/myapp/app/auth/views.py", line 15, in  login
login_user(user)
File "/home/environments/flask0101/lib/python2.7/site-packages/flask_login.py", line 675, in login_user
if not force and not user.is_active():
TypeError: 'bool' object is not callable

有什么问题?

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-login


    【解决方案1】:

    is_active 是布尔对象。

    >>> is_active = True
    >>> is_active()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'bool' object is not callable
    

    只需将其用作谓词,而不是调用它:

    if not force and not user.is_active:
        ...
    

    【讨论】:

    • 但这是lib/python2.7/site-packages/flask_login.py 中的一行,它是我调用login_user(user) 时执行的烧瓶文件。我将如何登录用户而不是from flask.ext.login import login_user 然后login_user(user)
    • @Alexxio,用另一个提供is_active 方法的对象包装一个对象怎么样?
    • 是的,就是这么做的。非常感谢。
    • @Alexxio,您的解决方案将不起作用。它将返回方法本身;它总是被断言为真值。
    • 其根本原因是您有一个名为 is_active 的字段,flask 要求您将其定义为一个函数。我现在正在解决这个问题,并且正在考虑将 is_active 重命名为 active 之类的。将其包装在一个隐藏了一个简单问题的对象中,并且更改该行与 Flask-Login 希望您的工作方式背道而驰。
    【解决方案2】:

    Flask-Login 0.3 contains a breaking changeis_activeis_anonymousis_authenticated 从函数更改为属性。如果您现在升级,您将不再收到 is_active 列不可调用的错误,您可以将其保留为列。如果你想改变行为,你可以用@property装饰你写的方法。

    【讨论】:

      【解决方案3】:

      鉴于原始问题的发布日期,我认为 0.3 更新不是问题所在。不过它确实帮助了我。感谢大卫主义!

      我发现即使是最新的 v0.3.2,我看到这个中断更改会引发 Flask Security 快速启动代码的错误。我现在卸载并降级到工作的 0.2.11 版本。

      pip install flask_login==0.2.11
      

      【讨论】:

        猜你喜欢
        • 2013-04-30
        • 2014-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多