您的位置:首页 > 其它

Flask - admin 快速入门

2016-12-25 15:24 585 查看

总结

快速高效的设置后台数据管理

支持,查询,导出功能

不支持数据导入管理

最高效的学习方式,直接看后台源码

常见问题场景

对页面进行汉化

自定义页面

自定义模型页面

自定模型页面中列的数据格式和内容

添加搜索/全文过滤

1 页面汉化

安装 Flask-BabelEx (cmd 中 输入 pip install Flask-BabelEx)

在代码中添加如下代码段:

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')


2 自定义页面

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'))


3 自定义模型页面

模型页面为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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码