У меня есть план, зарегистрированный со своими собственными маршрутами, в этих маршрутах мне нужно проверить роль пользователя с помощью декоратора @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.