散景服务器和烧瓶:提交

时间:2018-11-29 20:45:08

标签: python flask bokeh

我目前正在开始开发基于flask的Web应用程序,在该应用程序中,我将生成的图形嵌入与flask应用程序在同一台机器上运行bokeh应用程序的单独的bokeh服务器上。 (bokeh服务器与flask服务器的过程不同)

在烧瓶中,我通过

访问/加载bokeh会话
session = pull_session(session_id=None, url='http://mybokehserver:5000/mybokeh')
script = server_session(session_id=session.id, url='http://mybokehserver:5000/mybokeh')

典型

return render_template('flask.html', title='Slider example in flask', form=form, script=script )

然后将页面呈现在烧瓶中。

这将成功显示例如我的烧瓶页面中的bokeh团队的滑块示例。滑块正在运行,因此,回调按预期运行。因此,烧瓶服务器是我了解bokeh术语的“散景客户端”。

现在的问题是,提交表单后,如何从bokeh小部件访问属性,例如在flask服务器应用中使用的滑块的值。

我现在在网上搜索了好几天,包括bokeh文档,但是我找不到一个示例,或者至少在遇到时我不认识它。 有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

几天后,我发现执行所需操作的pythonic(或bokehonic)方法: 解决方案是在bokeh服务器端“为对象命名”。并声称可以在客户端访问这些对象by_name。

简化的服务器端示例如下:

from bokeh.plotting import figure, curdoc
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource

import numpy as np

x = np.zeros(2)
y = np.zeros(2)
v_src = ColumnDataSource(data=dict(x=x, y=y)) 

fig_v = figure(plot_width=600, plot_height=300)

fig_v.y_range.name = "y_range_v" # *** giving a name

fig_v.line('x','y',source=v_src, line_width=2,name="voltage") # *** giving a name

plot = gridplot([[fig_v],], toolbar_location='above')
curdoc().add_root(plot) 

现在,我可以例如通过(烧瓶)客户端上的拉出会话访问带有属性的fig_v.line对象和/或fig_v.yrange对象,并对其进行修改,例如:

with pull_session(session_id=None, url='http://192.168.3.1:5000/bk_serv') as session:
        script = server_session(session_id=session.id,url='http://192.168.3.1:5000/bk_serv')

        doc = session.document
        line = doc.get_model_by_name("voltage") # *** access via name
        line.data_source.data = dict(x=np.arange(len(some_x_data)), y=some_y_data)

        yrange = doc.get_model_by_name("y_range_v") # *** access via name
        yrange.start=min_somedata
        yrange.end = max_somedata

        return render_template('flask.html', form=form, script=script) 

我不确定细节,但是由bokeh创建的网络套接字连接负责情节的更新。

注意:上面的代码是我编写的代码的专家。它可能无法按原样运行,但是我无法发布全部著作,而这位专家提供了重要信息。