美文网首页
superset中flask_appbuilder的体现

superset中flask_appbuilder的体现

作者: 洛克黄瓜 | 来源:发表于2018-04-16 11:53 被阅读0次

概要

  • 什么是flask_appbuilder?
  • 什么是superset?
  • Web实现框架
  • 蓝图(Blueprint)的概念
  • superset对flask_appbuilder的封装细节体现

1.什么是flask_appbuilder?

  • flask_appbuilder是flask的扩展,便于迅速搭建一个Web应用(带有强大的用户权限管理能力,高度配置化应用)

2.什么是superset?

  • superset可以看做flask_appbuilder的一层封装,经过封装后,�web开发人员能够高效实现数据可视化。

3.Web实现框架

MVC示意图

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

  • Model,依靠SQLAlchemy(强大且流行的ORM)
  • View,很重(含大量业务逻辑,由于有封装好的很多基类,所以代码量其实不大)
  • Controller,很轻(几乎仅仅用于路由)

以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的封装细节体现

  • 关于config
    superset/config.py就是flask_appbuilder中所说的configuration,高度配置化。(配置项有数据库地址,数据库访问超时设置等)
  • 关于has_access
    观察源码会发现,superset/utils.py中定义的has_access与flask_appbuilder.security.decorators中定义的核心区别在于,superset加了一段代码:
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

相关文章

网友评论

      本文标题:superset中flask_appbuilder的体现

      本文链接:https://www.haomeiwen.com/subject/zxnskftx.html