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。


class="page-header">

{% if current_user.is_authenticated() %} Hello , {{ current_user.username }} ! {% else %} Welcome , main Index !!! {% endif %}


原因是使用@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
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


你可能感兴趣的:(python,flask,python,flask,error)