账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    flask: 'AnonymousUserMixin' object has no attribute 'can'
    40
    0

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

    角色验证出现问题,角色验证代码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
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部