flask: 'AnonymousUserMixin' object has no attribute 'can'

问题出现的环境背景及自己尝试过哪些方法

角色验证出现问题,角色验证代码current_user.can(Permission.WRITE_ARTICLES) and删去网站能够运行,但是角色验证依然失效。

相关代码

models部分代码:

def can(self, permissions):
    return self.role is not None and (self.role.permissions & permissions) 

 == permissions

    def is_administrator(self):
        return self.can(Permission.ADMINISTER)
    def __repr__(self):
        return '<User %r>' % self.username
class AnonymousUser(AnonymousUserMixin):
    def can(self, permissions):
        return False
    def is_administrator(self):
        return False
login_manager.anonymous_user = AnonymousUser

视图函数部分代码:

@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'))
    page = request.args.get('page', 1, type=int)

    show_followed = False
    if current_user.is_authenticated:
        show_followed = bool(request.cookies.get('show_followed', ''))
    if show_followed:
        query = current_user.followed_posts
    else:
        query = Post.query
    pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page, per_page=current_app.config['FLASKY_POSTS_PER_PAGE'],error_out=False)
    posts = pagination.items
    return render_template('index.html', form=form, posts=posts, show_followed=show_followed, pagination=pagination,current_time=dateti

测试部分代码(测试能够通过):

    def test_user_role(self):
        u = User(email='john@example.com', password='cat')
        self.assertTrue(u.can(Permission.FOLLOW))
        self.assertTrue(u.can(Permission.COMMENT))
        self.assertTrue(u.can(Permission.WRITE_ARTICLES))

flask 运行未登录主页就出现AttributeError: 'AnonymousUserMixin' object has no attribute 'can',如果登录进入u.can()角色验证函数失效主页中有以下代码:

{% if current_user.can(Permission.WRITE) %}{{ wtf.quick_form(form) }}{% endif %}

但是没起作用

阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题