from flask_babelex import Babel
#------------------
#@param app:flask app 程序
babel = Babel(app)
@babel.localeselector
def get_locale():
<!--override = request.args.get('lang')-->
<!--if override:-->
<!-- session['lang'] = override-->
<!--return session.get('lang', 'zh_Hans_CN')-->
return session.get('lang','zh_Hans_CN')
from flask_admin import expose,Admin,AdminIndexView
class FruitView(AdminIndexView):
@expose('/')
def index(self):
arg1 = 'home'
if current_user.is_authenticated and current_user.username =='admin':
#adminIndex.html 为与 app 的 static 文件夹下面
#其可继承任何jinja 模板
return self.render('adminIndex.html',arg1=arg1)
else:
return jsonify(u"请用管理员帐户登录")
class MyView(BaseView):
@expose('/')
def index(self):
arg1 = 'home'
if current_user.is_authenticated and current_user.username =='admin':
return self.render('adminIndex.html',arg1=arg1)
else:
return jsonify(u"请用管理员帐户登录")
#使用自己重写的 Home view 来重置了库中原本提供的Home view
#@param url ='/admin' 系统默认的,可以自己修改,设置的内容等同于
#admin = Blueprint('admin', __name__, url_prefix='/admin')
#即该模块下的所有url 地址都将使用 url 来作为前缀
admin = Admin(app,name=u'后台管理',index_view=FruitView())
#添加页面
admin.add_view(MyView(name='RootView'))
#添加下拉页面
admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Subview'))
模型页面为flask-admin 的特殊功能,里面加入了 创建,编辑,删除,导出,搜索等数据管理功能
操作类型有:
* can_create / can_edit / can_delete / can_export / 当以上标记设置为 True的时候 ,在模型页面中就能显示相关的按钮
控制类型:
* 筛选 column_searchable_list = [‘id’, ‘date’,’tickets’]
* 搜索 column_filters = column_searchable_list
字段汉化:
* 设置字段的映射表 column_labels=dict()
* 设置具体字段显示的内容 : column_formatters = dict()
* 在页面初始化的时候会从 column_labels 获取显示的列名称。在显示数据的时候 会使用 column_formatters 来格式化列中的数据列
class BaseModelView(ModelView):
""" 模型视图基类 """
def is_accessible(self):
return current_user.is_authenticated and current_user.username =='admin'
column_display_pk = True #在页面中是否显示主键
can_create = False
can_view_details = True
can_export = True
column_searchable_list = ['id', 'date','tickets']
column_filters = column_searchable_list
column_labels = {
'id': u'编号'
}
#设置每个列的显示数据的格式化
column_formatters = {
'date' : lambda v, c, m, p: ("%s"%m.date).split(" ")[0],
'operator_id':lambda v, c, m, p:get_name(m.operator_id),
}
class MyModelView(BaseModelView):
"""具体的模型视图"""
column_labels = copy.deepcopy(BaseModelView.column_labels)
column_searchable_list = copy.deepcopy(BaseModelView.column_searchable_list)
column_searchable_list.extend(["name",'support_id','isout'])
column_filters = column_searchable_list
column_labels.update({
'name':u"品名"
}
#@param stock: 具体的 orm 对象
#@param name:显示在页面上按钮的文字
#@param database.session: 数据库会话
admin = Admin(app,name=u'后台管理',index_view=FruitView())
admin.add_view(StockModelView(stock, database.session,name=u'入库'))
![后台管理页面视图](http://img.blog.csdn.net/20161225152741909?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzc0NjQ4Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)