superset中flask_appbuilder的体现

2018-04-16  本文已影响0人  洛克黄瓜

概要

1.什么是flask_appbuilder?

2.什么是superset?

3.Web实现框架

MVC示意图

结合superset代码,从MVC�角度看:

以Menu中的Slice为例,看其简要代码:

superset/models/core.py (Model层)

class Slice(Model, AuditMixinNullable, ImportMixin):

    """A slice is essentially a report or a view on data"""

    __tablename__ = 'slices'
    id = Column(Integer, primary_key=True)
    slice_name = Column(String(250))
    ... # 表相应的字段,及相关方法属性

superset/views/core.py (View层)

class SliceModelView(SupersetModelView, DeleteMixin):  # noqa
    datamodel = SQLAInterface(models.Slice)

    list_title = _('List Charts')
    show_title = _('Show Chart')
    add_title = _('Add Chart')
    edit_title = _('Edit Chart')

    can_add = False
    label_columns = {
        'datasource_link': _('Datasource'),
    }
    ... # 各种对父类属性的重写

appbuilder.add_view(
    SliceModelView,
    'Charts',
    label=__('Charts'),
    icon='fa-bar-chart',
    category='',
    category_icon='')

由于superset的处理,Slice会隐含有list,show,edit,delete等相应的关联处理(也就是Control层),业务开发人员需要根据需求做改动即可。

4.蓝图(Blueprint)的概念

蓝图是flask中的概念,通过蓝图实现在一个应用中构建应用组件以及支持通用模式。

Blueprint示意图

如上图所示,main和auth就是通过蓝图来实现模块的划分,这样开发者可以便于开发各自的模块。
应用Blueprint简要示例代码

from flask import Blueprint

main = Blueprint('main', __name__)
app.registrer_blueprint(main)

@main.route('/', methods=['GET', 'POST'])
def index():
    pass

superset/connectors/sqla的底层应该就是用到了蓝图的概念。
业务上对应数据源头的相关内容的CRUD操作显示。

5.superset对flask_appbuilder的封装细节体现

elif g.user and g.user.get_id() and g.user.is_authenticated():
            return redirect('/apply_permissions')

这样强化了建权的控制。

参考文档:

http://flask-appbuilder.readthedocs.io/en/latest/quickfiles.html
https://www.jianshu.com/p/95b584e4f76e

上一篇 下一篇

猜你喜欢

热点阅读