python - Flask-Admin 注册时设置默认用户角色
问题描述
我使用Flask-Admin制作仪表板,并为我的模型使用Flask-SQLAlchemy ,如下所示:
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'))
)
class Role(db.Model, RoleMixin):
__tablename__ = 'role'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
我希望当用户注册Flask-Admin时,用户的默认角色已设置为client。
roles
我在专栏上尝试过这样的事情:
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'),
default='client') # or default=3 (which is '3' is the client id in roles_user association table.
但我收到了这条信息:
TypeError: relationship() got an unexpected keyword argument 'default'
我也尝试过这个解决方案 但现在为我工作。
那么,是否可以在用户注册时设置默认角色..?
注意:在另一种情况下,我在这里也提出了与这个问题非常相似的问题,但情况不同。我希望在我通过superuser创建新用户时设置角色,而不是在用户自己注册时设置角色。
解决方案
我在应用程序初始化期间使用此代码:
@user_registered.connect_via(app)
def user_registered_sighandler(app, user, confirm_token):
default_role = user_datastore.find_role("user")
user_datastore.add_role_to_user(user, default_role)
db.session.commit()
推荐阅读
- javascript - 在对象数组中查找所有匹配的元素
- android - 如果应用程序在后台被杀死,如何正确处理片段的生命周期?
- json - ORA-30625 - JSON_OBJECT_T
- python - 带有大数组的 Numpy 和内存
- swift - 链接到二进制框架的单元测试
- angular - 在与现有功能相同的组件中创建角材料对话框
- r - 如何将单元格拆分为列标题和行
- docker - 如何将容器与新图像链接?
- dataframe - pyspark withColumn,如何改变列名
- cmake - 如何在 CMake 中添加选项 `llvm-config --cxxflags --ldflags --libs`?