我正在尝试扩展/修改Superset。我的目标是在“列表列”选项卡中添加“编辑表”表单的修改版本以及其他属性。当前有[列,详细名称,类型,可分组,可过滤,是临时的]。我想添加更多,例如“是目标”,“是预测变量”等。
我不确定执行此操作的最佳方法。
我认为尝试使用Flask Blueprints是可行的方法,但是文档中只有一个非常基本的“ hello world”类型示例:
from flask import Blueprint
simple_page = Blueprint('simple_page', __name__,
template_folder='templates',
url_prefix='/simple_page')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
return "Ok"
我如何设置蓝图以继承Superset中的几乎所有内容,但添加该表单的修改版本以及必要的修改,以将新列保存到数据库中?
我试图避免派生和创建自己的Superset修改版本,因为那样很难维护。
答案 0 :(得分:1)
不确定这是否是您需要的,但是我认为我的回答可以节省某人的时间并得出一些结论,因为网上几乎没有示例。我的示例是什么: 1)将自定义下拉列表添加到主菜单 2)更改列编辑字段。
我发现hook提供了在应用运行时执行某些操作的可能性。
我还发现您的情况TableModelView有效。但是columns tab
使用TableColumnInlineView可以工作。项目结构:
├── superset_config.py
├── templates
│ ├── example.html
superset_config.py 在运行应用程序时自动运行:
from flask import Blueprint, render_template, g, redirect
from flask_appbuilder import has_access
def flask_app_mutator(app):
# my version of superset v0.29
# be careful with imports! they are should be inside functions!
# in other case config will not work
from superset import appbuilder
from superset.connectors.sqla.views import TableModelView, TableColumnInlineView
# found our view and change something...
for v in appbuilder.baseviews:
if isinstance(v, TableModelView):
table_columns = v.related_views[0] # type: TableColumnInlineView
table_columns.edit_columns = ['column_name', 'type']
# add a new menu item
appbuilder.add_link(
'example',
label='example',
href='/example',
category_icon='fa-file-text-o',
category='Example')
# register our mutator - he will be called when app run
FLASK_APP_MUTATOR = flask_app_mutator
# just a new blue print for processing new menu item
example_bp = Blueprint(
'example',
__name__,
template_folder='templates',
static_url_path='/static/report')
@example_bp.route('/example')
def example():
# as I wrote above - be careful with imports...
from superset import appbuilder
if not g.user or not g.user.get_id():
return redirect(appbuilder.get_url_for_login)
return render_template('example.html', appbuilder=appbuilder)
BLUEPRINTS = [example_bp]
从存储 superset_config.py 的目录中运行我们的应用程序,登录并打开一些表进行编辑(例如:http://0.0.0.0:8088/tablemodelview/edit/1
)。您将看到我们视图的字段已更改+新菜单项:
如果打开菜单项(或superset
),您将看到http://0.0.0.0:8088/example
的基本布局:
example.html :
{% extends 'superset/basic.html' %}
{% block body %}
<div>Hello world</div>
{% endblock %}
{% block tail_js %}
{{ super() }}
<script type="text/javascript" src="{{ url_for('static', filename='appbuilder/js/jquery-latest.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='appbuilder/js/bootstrap.min.js') }}"></script>
{% endblock %}
但是我确定自定义很耗时。某些组件可以使用builded js packages使用。我不能保证UI
在mods之后可以正常工作。
无论如何,我希望这会对某人有所帮助。