从Flask api传递参数到Bokeh autoload_server

从Flask api传递参数到Bokeh autoload_server

问题描述:

上周我开始使用Bokeh,所以对它非常新颖,我试图使用Flask API中嵌入的滑块和下拉列表创建交互式条形图,所以我创建了flask for api同样,它显示带有滑块和下拉列表的图表,但不会在更改滑块/下拉列表值时动态更新图表。从Flask api传递参数到Bokeh autoload_server

然后经过进一步的研究,我发现我需要有一个单独的散景服务器运行交互部分,并从我的Flask API调用自动加载服务器。但是我不确定如何将我的http post参数发送到散景服务器,因为我的输入数据来自外部API,其参数为用户输入参数。

script=autoload_server(model=None,app_path="/bokeh-sliders",url="http://localhost:5006") 
return render_template('hello.html',script=script) 

在参考Sending URL parameter from Flask to a Bokeh server因为我不能在这上面发表评论,似乎功能已经被集成到参数传递给自动加载服务器,但我似乎无法找到它的任何文件。请帮我解决这个问题。

在旁注中,可以肯定的是,在没有运行散景服务器的情况下,不可能在flask api中执行诸如滑块,下拉等的交互。

在此先感谢。

我遇到了同样的问题,无法添加与Flask的交互,并走上了同样的道路。 The issue of passing arguments is also discussed here.

的功能已经被添加到背景虚化0.12.7,您现在可以通过键/值的字典使用arguments参数包括对应用程序的脚本:

script = server_document("https://example.com/myapp", 
         arguments={'foo': 'bar')) 

注意server_document是最近添加的,简单的autoload_server


适用版本更换0.12.7之前,你也可以使用以下解决方法(归功于kevinsa5对于g ithub):

@app.route('/amped') 
def amped(): 
    script = autoload_server(model = None, app_path="/amped") 
    # `script` is a string that looks like this (the first character is a newline): 
    """ 
<script 
    src="http://localhost:5006/amped/autoload.js?bokeh-autoload-element=6b813263-05df-45a5-bd91-e25c5e53c020" 
    id="6b813263-05df-45a5-bd91-e25c5e53c020" 
    data-bokeh-model-id="" 
    data-bokeh-doc-id="" 
></script> 
""" 
    # so to add on the necessary parameters, we have to insert them manually. hopefully we won't need to urlencode anything. 
    # note that request.args = a MultiDict, so be careful of duplicate params 
    # http://werkzeug.pocoo.org/docs/0.11/datastructures/#werkzeug.datastructures.MultiDict 

    script_list = script.split("\n") 
    script_list[2] = script_list[2][:-1] 
    for key in request.args: 
     script_list[2] = script_list[2] + "&{}={}".format(key, request.args[key]) 
    script_list[2] = script_list[2] + '"' 
    script = "\n".join(script_list) 
    return render_template("amped.html", script = script) 

这允许您使用

doc.session_context.request.arguments 
+0

冷静地访问它,谢谢,我会尝试。也有可能有多个散景API(我不知道还有什么可说的),这意味着现在我正在运行使用bokeh-sliders.py的散景服务器,其中只存在一个图表的代码。但是我想让多个flask api调用不同的图表,所以我可以在这个bokeh-slider.py文件中创建多个图表并调用相应的图表,或者有其他方法 – starFire