Flask-permissions: AttributeError: объект «str» не имеет атрибута «роли»

Созданный на 15 июл. 2016  ·  3Комментарии  ·  Источник: raddevon/flask-permissions

Привет, я пытаюсь выполнить шаги, но получаю сообщение об ошибке, когда пытаюсь добавить роли пользователю (экземпляр 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 )

Самый полезный комментарий

Я предполагаю, что с этой строкой...
first_user = UserMixin
ты имеешь в виду это...
first_user = UserMixin()
но вам действительно нужно это сделать...
first_user = User()
(где User — это подкласс UserMixin вашего определения).

Вам нужно создать экземпляр пользователя с вашей моделью пользователя, который должен быть подклассом UserMixin. Вы больше не можете делать это с помощью UserMixin напрямую. Я считаю это недостатком документации, поэтому сейчас обновляю README, чтобы показать, как правильно создать пользователя с новым кодом. Я собираюсь исправить тесты и с этим, так что PR наконец-то будет готов!

Все 3 Комментарий

Привет, Лео, у меня наконец-то появилась возможность взглянуть на это, и у меня возникли проблемы с точным определением твоей ошибки. Я видел некоторые другие, о которых мы можем поговорить, и я могу знать, что их вызывает (упомянутые ниже). Тем не менее, хорошая новость заключается в том, что у меня есть полностью функциональный пример, использующий приведенный выше код модели пользователя на 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 наконец-то будет готов!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги