Python中Flask框架有什么好的权限管理机制插件,类似Django-Admin?
最好是拥有:用户,角色,权限
回复请说明你选择的理由,或者优缺点
Python中Flask框架有什么好的权限管理机制插件,类似Django-Admin?
django-admin 不是权限管理只是后台啊 
Flask本身没有像Django-Admin那样内置的、开箱即用的全功能管理后台。不过,有几个非常成熟的插件可以帮你构建强大的权限管理系统,核心是Flask-Admin和Flask-Security-Too的组合。
1. Flask-Admin (核心管理界面) 这是最接近Django-Admin的插件。它提供了现成的Model视图,能快速为你的SQLAlchemy、Peewee等ORM模型生成增删改查的后台管理页面。但它主要是个“管理面板生成器”,不直接处理用户认证和细粒度权限。
2. Flask-Security-Too (认证与授权核心) 这是Flask-Security的活跃维护分支,是处理权限的“大脑”。它基于Flask-Login、Werkzeug等,提供了:
- 用户认证:注册、登录、注销、忘记密码。
- 角色(Role)和权限(Permission)模型:这是关键。你可以定义角色(如
admin,user,moderator),并为角色分配权限(如user-read,post-delete)。 - 装饰器保护视图:用
@roles_required('admin')或@permissions_required('post-delete')来保护路由。
经典组合方案:Flask-Admin + Flask-Security-Too 这是社区公认的最佳实践之一。用Flask-Security-Too管理用户、角色和权限逻辑,然后让Flask-Admin集成这个权限系统来控制后台访问。
代码示例:一个简单的集成
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin, AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_security import Security, SQLAlchemyUserDatastore, RoleMixin, UserMixin, login_required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
# 1. 定义数据模型 (Flask-Security-Too)
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):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
# 2. 设置Flask-Security-Too
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
# 3. 自定义受保护的Admin视图
class ProtectedModelView(ModelView):
def is_accessible(self):
# 只有具有'admin'角色的用户才能访问
from flask_login import current_user
return current_user.is_authenticated and current_user.has_role('admin')
def inaccessible_callback(self, name, **kwargs):
# 无权限则重定向到登录页
return redirect(url_for('security.login'))
class ProtectedAdminIndexView(AdminIndexView):
def is_accessible(self):
from flask_login import current_user
return current_user.is_authenticated and current_user.has_role('admin')
# 4. 创建Admin并使用受保护的视图
admin = Admin(app, index_view=ProtectedAdminIndexView())
admin.add_view(ProtectedModelView(User, db.session))
admin.add_view(ProtectedModelView(Role, db.session))
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)
这个例子创建了一个基础应用。ProtectedModelView确保了只有admin角色的用户能看到并操作Flask-Admin里的用户和角色管理页面。
其他值得考虑的插件
- Flask-Principal:提供了更细粒度的身份和权限需求,适合复杂场景,但上手稍难。
- Flask-Login:如果你只需要基础的会话管理和“登录状态”,可以用它作为底层,但复杂权限需要自己实现。
总结建议 对于大多数需要类Django-Admin权限管理的项目,Flask-Admin + Flask-Security-Too这个组合是稳定、高效的选择。
没说清,类似与 django-admin 后台带的权限管理机制
flask-admin
目前不需要后台,只需要权限管理
推荐 Flask-Security
#5 这个库的作者已经好久没更新了吧,而且它的代码实现基本也是不太行。
自己建个权限表用不了十分钟啊
造轮子不止 10 分钟啊
#6 去年更新过吧? github 还在开发啊
姑且认为你很久没用了
你们真的看清楚了真的是原作者在更新吗?而且,除了大家的小修小补之外真的有新功能加上?
没有特别好用的,flask_admin 也不行,flask-security 的用法我是觉得挺不适应的,最后还是自己造轮子


