当前位置: 首页 > 工具软件 > flask-rbac > 使用案例 >

flask-admin快速使用

荣轶
2023-12-01

快速使用

from flask_admin.contrib.sqla import ModelView
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin

db = flask_sqlalchemy()
flask_admin = Admin()

from .models import *

def create_app(settings_cls):
    app = Flask(__name__)
    app.config.from_object(settings_cls)  # 加载配文件
    db.init_app(app)  # 初始化数据库
    flask_admin.init_app(app)  # 初始化admin
    # admin配置
    # 加载数据库管理页面, category为一个tag,model是子标签
    models = [(Users, '用户管理'), (Roles, '角色管理'), (Permission, "权限管理"), (Menus, "菜单管理")]
    for model in models:
        flask_admin.add_view(ModelView(model[0], db.session, name=model[1], category='系统管理'))
    return app

简单的自定制使用

admin.pyadmin视图函数

from flask_admin.contrib.sqla import ModelView
from flask_admin import BaseView, expose


# 定制一个页面,用自己的模板(仅仅是页面)然后再程序中加入代码 admin.add_view(MyNews(name=u'发表新闻'))
class MyAdminView(BaseView):
    @expose('/', methods=['GET', 'POST'])
    def index(self):
        return self.render('admin/myadmin.html')
    # 调用的一个子url
    @expose('/test/', methods=['GET', 'POST'])
    def test(self):
        return ".test"


# 管理数据库表,设置表显示哪些字段
class MyV1(ModelView):
    # can_create = False

    column_labels = {
        'id': u'序号',
        'name': u'名称',
    }
    column_list = ('id', 'name')

    def __init__(self, models_name, session, **kwargs):
        super(MyV1, self).__init__(models_name, session, **kwargs)

__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
from flask_wtf.csrf import CSRFProtect
from flask_admin import Admin, AdminIndexView
from flask_babelex import Babel


db = SQLAlchemy()
csrf = CSRFProtect()
# 修改主页,index_view=(template="welcome.html", name='名称')
flask_admin = Admin(name="首页", url="/admin", index_view=AdminIndexView(name='Admin后台管理', template="admin/welcome.html"))
# 国际化 需要在settings中加入配置 BABEL_DEFAULT_LOCALE = 'zh_CN'
babel = Babel()

from .models import *
from .views.login import login
from .views.register import register
from .views.index import index
from .views.rbac.Middleware import *
from .views.rbac.RBAC_menu import Process_menu
from .views import admin


def create_app(settings_cls):
    app = Flask(__name__)
    app.config.from_object(settings_cls)  # 加载配文件
    Session(app)  # session写到redis
    db.init_app(app)  # 初始化数据库
    csrf.init_app(app)  # 加载csrf
    flask_admin.init_app(app)  # 初始化admin
    babel.init_app(app)  # 国际化
    # 注册app
    app.register_blueprint(login)
    app.register_blueprint(register)
    app.register_blueprint(index)
    # 加载中间件
    app.before_request(RbacMiddleware.rbac_middleware)
    # template全局函数
    app.add_template_global(Process_menu.process_menu, name='make_menu')
    # admin配置
    # 加载数据库管理页面, category为一个tag,model是子标签
    models = [(Users, '用户管理'), (Roles, '角色管理'), (Permission, "权限管理"), (Menus, "菜单管理")]
    for model in models:
        flask_admin.add_view(admin.MyV1(model[0], db.session, name=model[1], category='系统管理'))

    # 加载自定义页面
    flask_admin.add_view(admin.MyAdminView(name="test", category='test'))
    return app

首页htmlwelcome.html

{% extends 'admin/master.html' %}
{% block body %}
  <h1>Hello World from MyAdmin!</h1>
    <br>
    <br>
  <a href="{{ url_for('index.index') }}">Click me to go to index view</a>
{% endblock %}

自定义页面myadmin.html

{% extends 'admin/master.html' %}
{% block body %}
  Hello World from myadminview!<br/>
  <a href="{{ url_for('.test') }}">Click me to go to test view</a>
{% endblock %}
 类似资料: