Привет, я пытаюсь выполнить шаги, но получаю сообщение об ошибке, когда пытаюсь добавить роли пользователю (экземпляр 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 )
Привет, Лео, у меня наконец-то появилась возможность взглянуть на это, и у меня возникли проблемы с точным определением твоей ошибки. Я видел некоторые другие, о которых мы можем поговорить, и я могу знать, что их вызывает (упомянутые ниже). Тем не менее, хорошая новость заключается в том, что у меня есть полностью функциональный пример, использующий приведенный выше код модели пользователя на https://github.com/bepetersn/flask-permissions-ex.
Прошло некоторое время с тех пор, как я просматривал этот материал, но самое большое изменение в моем форке (относительно вышеупомянутых ошибок) заключается в том, что теперь вам не следует создавать экземпляр 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
вашего определения).
Вам нужно создать экземпляр пользователя с вашей моделью пользователя, который должен быть подклассом UserMixin. Вы больше не можете делать это с помощью UserMixin напрямую. Я считаю это недостатком документации, поэтому сейчас обновляю README, чтобы показать, как правильно создать пользователя с новым кодом. Я собираюсь исправить тесты и с этим, так что PR наконец-то будет готов!
Самый полезный комментарий
Я предполагаю, что с этой строкой...
first_user = UserMixin
ты имеешь в виду это...
first_user = UserMixin()
но вам действительно нужно это сделать...
first_user = User()
(где
User
— это подклассUserMixin
вашего определения).Вам нужно создать экземпляр пользователя с вашей моделью пользователя, который должен быть подклассом UserMixin. Вы больше не можете делать это с помощью UserMixin напрямую. Я считаю это недостатком документации, поэтому сейчас обновляю README, чтобы показать, как правильно создать пользователя с новым кодом. Я собираюсь исправить тесты и с этим, так что PR наконец-то будет готов!