Ошибка колбы при использовании декоратора role_required в маршруте колбы - PullRequest
0 голосов
/ 01 июня 2019

У меня есть план, зарегистрированный со своими собственными маршрутами, в этих маршрутах мне нужно проверить роль пользователя с помощью декоратора @roles_required, импортированного из библиотеки flask-user Я могу войти в систему, но когда мне нужно получить доступ к этому маршруту, я получаю сообщение об ошибке:

AttributeError: 'Flask' object has no attribute 'user_manager'

Я удалил декоратор и страница хорошо отрисовалась.

Модели:

user_roles = db.Table('user_roles',
          db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
          db.Column('role_id', db.Integer, db.ForeignKey('role.id'))
)


class User(CRUDMixin, UserMixin, db.Model):

    __tablename__ = 'user'

    id = db.Column(db.Integer,
                   primary_key = True
                   )

    username = db.Column(db.String(64),
                         index=False,
                         unique=True,
                         nullable=False
                         )
    password = db.Column(db.String(64),
                         index=False,
                         nullable=False
                        )
    email = db.Column(db.String(80),
                      index=True,
                      unique=True,
                      nullable=False
                      )
    created = db.Column(db.DateTime(timezone=True),
                        index=False,
                        unique=False,
                        nullable=False
                        )
    bio = db.Column(db.Text,
                    index=False,
                    unique=False,
                    nullable=True
                    )

    # Relationsihp with role table
    # To get the roles of an user: User.permission.all()
    # To get the users of a role: Role.users
    roles = db.relationship('Role',
                            secondary=user_roles,
                            backref=db.backref('users', lazy='dynamic')
                            )

    def __rep__(self):
        return f"<User>('{self.username}', '{self.email}'')"

    def __init__(self, name, email, username, password, bio=''):
        self.name = name
        self.email = email
        self.username = username
        self.set_password(password)
        self.bio = bio
        self.created = datetime.datetime.now()

    class Role(db.Model):

    __tablename__ = 'role'

    id = db.Column(db.Integer(),
                   primary_key=True
                   )
    name = db.Column(db.String(50),
                     unique=True
                     )
    created = db.Column(db.DateTime(timezone=True),
                        index=False,
                        unique=False,
                       )

    def __init__(self, name):
        self.name = name
        self.created = datetime.datetime.now()

    def __repr__(self):
        return '<Role {}>'.format(self.name)

Маршрут определен так:

from flask_user import roles_required

@myblueprint.route('/')
@roles_required(['admin', 'editor'])
def index_publications():
    return "This is my publications page.", 200

Как я уже сказал, на сообщение "Это моя страница публикаций" мне нужно удалить декоратор, вместо этого я получил AttributeError из Flask.

...