嗨,我正在尝试按照这些步骤操作,但是当我尝试向用户(UserMIxin 实例)添加角色时出现错误,并且我不确定如何将所有这些放在一起。
my_user = UserMixin()
my_user.add_roles('admin', 'superadmin')
db.session.add(my_user)
db.session.commit()
但是当我创建一个普通用户时,我通常会这样做
my_user = User(name="xxx", email="[email protected]", pass="1234")
db.session.add(my_user)
db.session.commit()
我的模型是这样的:
class User(UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(50), nullable=False)
def __init__(self, name, email, password, roles=None):
"""Setting params to the object."""
self.name = name
self.email = email.lower()
self.password = bcrypt.hashpw(
password.encode('utf-8'), bcrypt.gensalt())
UserMixin.__init__(self, roles)
.... other methods ...
关于如何做对的任何提示? :)
(我使用@bepetersn fork)
嗨,Leo,我终于有机会看看这个,但我在产生你的确切错误时遇到了麻烦。 我看到了其他一些,我们可以讨论一下,我可能知道是什么导致了它们(如下所述)。 但是,好消息是我在https://github.com/bepetersn/flask-permissions-ex 有一个使用上述用户模型代码的完整功能示例。
自从我看这些东西以来已经有一段时间了,但是我的 fork 最大的变化(re:上述错误)是你现在不应该实例化 UserMixin ——它是一个抽象模型库。 所以你想使用像上面这样的用户模型。 这可能会导致一些错误——关于无法设置角色,我得到了与您不同的错误。
让我知道你的想法。
嗨,布赖恩,
我的主要问题是当我创建角色然后尝试将其添加到用户时.. 出现问题:)
from app import db
from flask_permissions.models import UserMixin, Role
db.create_all()
superadmin.add_abilities(
'create_admin', 'edit_admin_user', 'delete_admin_user')
db.session.add(superadmin)
db.session.commit()
#....
first_user = UserMixin
first_user.add_roles('superadmin') ###triggers the error
db.session.add(first_user)
db.session.commit()
我假设这条线......
first_user = UserMixin
你是这个意思...
first_user = UserMixin()
但你真的需要这样做......
first_user = User()
(其中User
是您定义的UserMixin
子类)。
你需要用你的 User 模型创建一个用户实例,它应该是 UserMixin 的一个子类。 你不能再直接用 UserMixin 来做。 我认为这是文档失败,因此我目前正在更新 README 以显示使用新代码实际创建用户的正确方法。 我也会用这个来修复测试,所以PR 终于准备好了!
最有用的评论
我假设这条线......
first_user = UserMixin
你是这个意思...
first_user = UserMixin()
但你真的需要这样做......
first_user = User()
(其中
User
是您定义的UserMixin
子类)。你需要用你的 User 模型创建一个用户实例,它应该是 UserMixin 的一个子类。 你不能再直接用 UserMixin 来做。 我认为这是文档失败,因此我目前正在更新 README 以显示使用新代码实际创建用户的正确方法。 我也会用这个来修复测试,所以PR 终于准备好了!