AttributeError:'AnonymousUserMixin'对象没有属性'can'

时间:2018-12-02 13:22:27

标签: python python-3.x flask flask-login

烧瓶学习问题

为了满足匿名用户的自定义要求,我在模型中设置了一个类:

    class MyAnonymousUser(AnonymousUserMixin):    
        def can(self, permissions):
            return False
        def is_administrator(self):
            return False
    login_manager.anonymous_user = MyAnonymousUser

烧瓶运行遇到错误:在视图中,'AnonymousUserMixin'对象没有属性'can'

@main.route('/', methods=['GET', 'POST'])
    def index():
        form = PostForm()
        if current_user.can(Permission.WRITE_ARTICLES) and form.validate_on_submit():
            post = Post(body=form.body.data,
                        author=current_user._get_current_object())
            db.session.add(post)
            db.session.commit()
            return redirect(url_for('.index'))

我不明白为什么MyAnonymousUser没有将current_user归因。

这是我的origin code

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

似乎您假设通过将登录管理器分配给您的类,就可以继承您创建的方法。这不是代码中发生的事情。您实际上正在做的是覆盖已经提供的login_manager.anonymous_user的功能。

Check the documentation here

实际上应该在包含用户的模型中定义您的函数。似乎您正在尝试检查用户是否匿名。因此,以下是我对编码的建议。

UserModel(db.Model, UserMixin):

    def can(self, permissions):
        return False

    def is_administrator(self):
        return False

@main.route('/', methods=['GET', 'POST'])
def index():
    form = PostForm()
    if current_user.is_active and form.validate_on_submit():

        if current_user.can(Permission.WRITE_ARTICLES):
            post = Post(body=form.body.data,
                        author=current_user._get_current_object())
            db.session.add(post)
            db.session.commit()
            return redirect(url_for('.index'))