如何使用 flask-login 处理角色
How to handle roles with flask-login
我有这个问题我想为我的应用程序创建两个角色,医生和病人所以通过 flask 登录我们创建了一个 class 用户来处理我们应用程序中的限制,但是我如何才能将这些角色到我的用户模型,用于根据角色处理信息。
这是我的用户模型
from flaskblog import db
from flaskblog import login_manager
from flask_login import UserMixin
@login_manager.user_loader # decorator para validar si el usuario está autenticado
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
id= db.Column(db.Integer, primary_key=True)
username= db.Column(db.String(20), unique=True, nullable=False)
email= db.Column(db.String(100), unique=True, nullable=False)
image_file= db.Column(db.String(50), nullable=False, default='default.jpg')
password= db.Column(db.String(60), nullable=False)
'''Relacion uno a muchos '''
# un usuario puede ser autor de uno o muchos posts
# db.relationship describe la relacion entre el usuario y el post
# tiene tres params 1: nombre de la clase con la que se establece la relacion}
# 2: backref con la cual se establece la forma de la relacion el usuario sera el autor del post
# 3: lazy la forma en que se cargan los datos
post = db.relationship('Post', backref='author', lazy=True)
def __repr__(self):
return f"User( '{self.username}', '{self.email}', '{self.image_file}')"
我可以为医生和病人创建模型,但如何根据这些角色真正处理信息
您可以像这样向您的模型添加角色,我将其与 Flask-Security 一起使用。将此添加到您的用户对象:
roles = db.relationship('Role', secondary='roles_users', backref=db.backref('users', lazy='dynamic'))
并添加角色对象
class Role(db.Model, RoleMixin):
__tablename__ = 'role'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(255), unique=True)
description = db.Column(db.String(255))
最后添加多对多关系
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
使用此设置,您可以使用其中之一装饰路线
@roles_accepted('medic', 'patient')
@roles_required('medic')
我有这个问题我想为我的应用程序创建两个角色,医生和病人所以通过 flask 登录我们创建了一个 class 用户来处理我们应用程序中的限制,但是我如何才能将这些角色到我的用户模型,用于根据角色处理信息。
这是我的用户模型
from flaskblog import db
from flaskblog import login_manager
from flask_login import UserMixin
@login_manager.user_loader # decorator para validar si el usuario está autenticado
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
id= db.Column(db.Integer, primary_key=True)
username= db.Column(db.String(20), unique=True, nullable=False)
email= db.Column(db.String(100), unique=True, nullable=False)
image_file= db.Column(db.String(50), nullable=False, default='default.jpg')
password= db.Column(db.String(60), nullable=False)
'''Relacion uno a muchos '''
# un usuario puede ser autor de uno o muchos posts
# db.relationship describe la relacion entre el usuario y el post
# tiene tres params 1: nombre de la clase con la que se establece la relacion}
# 2: backref con la cual se establece la forma de la relacion el usuario sera el autor del post
# 3: lazy la forma en que se cargan los datos
post = db.relationship('Post', backref='author', lazy=True)
def __repr__(self):
return f"User( '{self.username}', '{self.email}', '{self.image_file}')"
我可以为医生和病人创建模型,但如何根据这些角色真正处理信息
您可以像这样向您的模型添加角色,我将其与 Flask-Security 一起使用。将此添加到您的用户对象:
roles = db.relationship('Role', secondary='roles_users', backref=db.backref('users', lazy='dynamic'))
并添加角色对象
class Role(db.Model, RoleMixin):
__tablename__ = 'role'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(255), unique=True)
description = db.Column(db.String(255))
最后添加多对多关系
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
使用此设置,您可以使用其中之一装饰路线
@roles_accepted('medic', 'patient')
@roles_required('medic')