superset 最新稳定版0.28
在开始之前我想强调一点,Superset定位BI,如果你想找的只是一款简单图表工具,那么建议echarts之类工具就能给你满足。否则supserset那些复杂的统计函数和切片配置会让你很是疑惑。
一、superset简介
apache Superset是一个现代的、企业级的商业智能web应用程序。
二、flask appbuilder简介
flask appbuilder是简单快速的应用程序开发框架,建立在flask之上。它提供包括详细的安全性功能,并为您的模型自动CRUD,以及丰富的图表等等,
三、superset项目目录说明
superset采用了flask appbuilder作为其web 框架,其项目目录介绍如下:
- 主要文件夹功能如下:
- assets:前端采用了webpack技术,webpack 是一个模块打包器。webpack 的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)。
- models:存放项目的,封装数据库相关操作,包括切片、看板、数据库、日志等等数据操作。
- static:flask appbuilder用以存放项目静态文件的目录,存放包括测试、react页面文件、css样式表,js,图片等文件。
- templates:即是flash的模板目录,几乎项目所有的HTML文件都在这里,basic.html提供web整体的样式风格。
- views:视图文件,定义了url,实现前端路由。
- 从MVC角度看:
- Model,依靠SQLAlchemy(强大且流行的ORM)
- View,很重(含大量业务逻辑,由于有封装好的很多基类,所以代码量其实不大)
- Controller,(几乎仅仅用于路由)
以Menu中的Slice为例,看其简要代码:
superset/models/core.py (Model层)
class Dashboard(Model, AuditMixinNullable, ImportMixin):
“”“The dashboard object!”""
tablename = ‘dashboards’
id = Column(Integer, primary_key=True)
dashboard_title = Column(String(500))
position_json = Column(utils.MediumText())
superset/views/core.py (Control层)
class DashboardModelView(SupersetModelView, DeleteMixin): # noqa
route_base = ‘/dashboard’
datamodel = SQLAInterface(models.Dashboard)
@expose(’/show/’, methods=[‘GET’])
@has_access
def show(self, pk):
pk = self._deserialize_pk_if_composite(pk)
widgets = self._show(pk)
return self.render_template(self.show_template,
pk=pk,
title=self.show_title,
widgets=widgets,
related_views=self._related_views)
superset/templates/superset/base.html(View层)
{% extends “appbuilder/baselayout.html” %}
{% block head_css %}
{{super()}}
{% for entry in get_unloaded_chunks(css_manifest(‘theme’), loaded_chunks) %}
{% endfor %}
{% endblock %}
{% block head_js %}
{{super()}}
{% with filename=“theme” %}
{% include “superset/partials/_script_tag.html” %}
{% endwith %}
{% endblock %}
{% block tail_js %}
{{super()}}
{% with filename=“preamble” %}
{% include “superset/partials/_script_tag.html” %}
{% endwith %}
{% endblock %}
四、项目配置
根目录下config.py就是flask_appbuilder中的配置,可以实现系统功能的高度配置。
可以通过PYTHONPATH中提供一个super_config来覆盖该文件中的所有配置。