Flask 超集定制。扩展/修改
我正在尝试扩展/修改超集。我的目标是在“列表列”选项卡中添加具有附加属性的“编辑表”表单的修改版本。目前有[列,详细名称,类型,可分组,可筛选,是暂时的]。我想再加上几个,比如“是目标”,“是预测者”等等 我不确定这样做的最佳方式 我认为尝试使用Flask蓝图来实现这一点是可行的,但文档中只有一个非常基本的“hello world”类型示例:Flask 超集定制。扩展/修改,flask,superset,apache-superset,Flask,Superset,Apache Superset,我正在尝试扩展/修改超集。我的目标是在“列表列”选项卡中添加具有附加属性的“编辑表”表单的修改版本。目前有[列,详细名称,类型,可分组,可筛选,是暂时的]。我想再加上几个,比如“是目标”,“是预测者”等等 我不确定这样做的最佳方式 我认为尝试使用Flask蓝图来实现这一点是可行的,但文档中只有一个非常基本的“hello world”类型示例: from flask import Blueprint simple_page = Blueprint('simple_page', __name__,
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"
从flask导入蓝图
简单页面=蓝图(‘简单页面’、‘名称’,
template_folder='templates',
url_前缀='/simple_page')
@简单页面路由('/',默认值={'page':'index'})
@简单页面路由(“/”)
def显示(第页):
返回“Ok”
我如何设置一个蓝图来继承超集中的几乎所有内容,但添加该表单的修改版本以及必要的修改以将新列保存到数据库中
我试图避免分叉和创建我自己的修改版本的超集,因为这将很难维护 不确定这是否是你需要的,但我认为我的回答可以节省一些时间并得出一些结论,因为网上几乎没有例子。我的示例是:1)将自定义下拉列表添加到主菜单中2)更改列编辑字段 我发现,当应用程序运行时,它提供了做一些事情的可能性。 我还发现在你的情况下是有效的。但是
列选项卡
可以使用。项目结构:
├── 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
)。您将看到我们视图的字段已更改+新菜单项:
如果打开菜单项(或http://0.0.0.0:8088/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 %}
{%extends'超集/basic.html%}
{%block body%}
你好,世界
{%endblock%}
{%block tail_js%}
{{super()}}
{%endblock%}
但我确信定制很耗时。有些组件使用。我不能保证UI
在backend
mods之后能够正常工作
无论如何,我希望这能帮助别人。您好。你找到解决办法了吗?我研究了一点
超集
定制。看来时间太少了,我放弃了超集。我为我的毅力道歉。你能推荐一些好的工具吗?我看到了。但看起来与超集相同。我需要类似的东西,但有可能部署在我自己的服务器上。我仍在评估多种选择。然而,Danila Ganchar下面的答案看起来非常有用。任何可能的解决方案都需要进行一些修改以供高级使用。谢谢。祝你好运;)