快速使用
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 %}