python - 属性错误: 'AnonymousUserMixin' object has no attribute 'can'

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

flask学习问题

为了自定义匿名用户的需求,我在models中设置了一个类:

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

Flask运行遇到错误:'AnonymousUserMixin'对象没有属性'can',在 View 中:

@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'))

我不明白为什么 current_user 不属于 MyAnonymousUser。

这是我的 origin code

感谢您的帮助

最佳答案

您似乎认为通过将登录管理器分配给您的类,您将继承您创建的方法。这不是代码中发生的情况。您实际上所做的是覆盖已提供的 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'))

关于python - 属性错误: 'AnonymousUserMixin' object has no attribute 'can' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53580650/

相关文章:

python - Pandas to_sql 无法写入 PostgreSQL 上除 'public' 之外的模式

python - 在大学电脑上安装python模块

python - Django:使用sqlite3作为数据库在Heroku上部署应用程序

python - 迭代Python字典中元组键的一部分

flask - 如果我使用应用程序工厂模式,如何在gunicorn中运行flask应用程序?

python - django删除用户表

python - Tkinter 文本小部件 - 在事件函数中使用单击的文本

python-3.x - PyGame,等待计算机决定它的 Action

python - Flask-Script 如何到达当前应用程序?

python - 有没有办法在 Flask WTForms 中创建数据列表字段?