我目前正在开始开发基于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文档,但是我找不到一个示例,或者至少在遇到时我不认识它。 有人可以指出我正确的方向吗?
答案 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创建的网络套接字连接负责情节的更新。
注意:上面的代码是我编写的代码的专家。它可能无法按原样运行,但是我无法发布全部著作,而这位专家提供了重要信息。