我是靠谱客的博主 傲娇黑夜,最近开发中收集的这篇文章主要介绍TypeError: 'bool' object is not callable,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天在学习 flask时出现 TypeError: 'bool' object is not callable 报错。在这记录一下,以便以后注意。

在网上找到两个原因:

1、认为版本bug导致:[http://blog.csdn.net/thone00/article/details/78194307]

2、is_authenticated是属性而不是方法,把括号去掉就可以了:[http://bbs.csdn.net/topics/391875382]



产生原因是:在定义用户模型时继承 object,自定义了is_authenticated、is_active、is_anonymous等必须属性,自定义时没有使用装饰器.

自定义代码

# 使用 flask-login 必须实现固定四个方法
# 或者直接让用户模型继承 UserMixin类,默认实现下面四个方法
def is_authenticated(self):
    """如果用户已经登录必须返回 TRUE"""
    return True

def is_active(self):
    """如果循序用户登录,必须返回 TRUE"""
    return True

def is_anonymous(self):
    """对普通用户必须返回 False"""
    return False

def get_id(self):
    """必须返回用户的唯一表示符,使用 Unicode 编码字符串"""
    return self.id

源码

@property
def is_active(self):
    return True

@property
def is_authenticated(self):
    return True

@property
def is_anonymous(self):
    return False

def get_id(self):
    try:
        return text_type(self.id)
    except AttributeError:
        raise NotImplementedError('No `id` attribute - override `get_id`')

在定义管理员模型继承 flask-login.AnonymousUserMixin ,但在使用时直接当做一般的方法使用,一般用户登录时正常,管理员用户登录时,报错 TypeError: 'bool' object is not callable。

<!--首页显示-->
<div class="page-header">
    <h1>
    <!--在模板中使用if语句,如果用户登录着显示用户名称,否则显示这是主页-->
    {% if current_user.is_authenticated() %}
        Hello , {{ current_user.username }} !
    {% else %}
       Welcome , main Index !!!
    {% endif %}
    </h1>
</div>

原因是使用@property装饰器的方法,不能按一般方法调用如下

class A(object):
    name='sdfs'

    @property
    def print_a(self):
        print('a')

    def print_b(self):
        print('b')



a = A()

a.print_a
a.print_b()

a.print_a()
```

#输出

Traceback (most recent call last):
a
  File "D:/Workspace/python/exmple/model_exmples/tmp.py", line 24, in <module>
b
    a.print_a()
a
TypeError: 'NoneType' object is not callable

```


解决方法:将自定义模型按源码的方式加上装饰器,并在调用是按属性调用即可

# 或者直接让用户模型继承 UserMixin类,默认实现下面四个方法,在源码中使用装饰达到作为属性使用
@property
def is_authenticated(self):
    """如果用户已经登录必须返回 TRUE"""
    return True

@property
def is_active(self):
    """如果循序用户登录,必须返回 TRUE"""
    return True

@property
def is_anonymous(self):
    """对普通用户必须返回 False"""
    return False


最后

以上就是傲娇黑夜为你收集整理的TypeError: 'bool' object is not callable的全部内容,希望文章能够帮你解决TypeError: 'bool' object is not callable所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部