快速使用
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.py
admin视图函数
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 %}