迁移到Bokeh> 1.0:server_session中缺少“ arguments”参数

时间:2019-01-24 09:56:24

标签: python django bokeh

背景:

我有旧的生产代码,这些代码将Bokeh应用程序嵌入Django。目的是为用户特定的仪表板提供服务。散景代码根据documentation从请求中访问username个参数。

应用程序是使用bokeh 0.13构建的。

在Django端,按照以下示例传递username参数:

views.py中的示例片段:

from bokeh.util import session_id
from bokeh.embed import server_session

def get_bokeh_script(user, url_suffix):
    bokeh_session_id = session_id.generate_session_id()
    bokeh_url = "https://" + settings.BOKEH_HOST + ":" + settings.BOKEH_PORT + url_suffix
    script = server_session(url=bokeh_url, session_id=bokeh_session_id, resources=None, arguments={"username":user.username})
    return script



def my_view1(request):
    url_suffix = "/my_suffix"
    script = get_bokeh_script(request.user, url_suffix)
    return render(request,'dashboard/index.html',{'script':script})

当前情况:

我需要将代码迁移到bokeh >1.0,尤其是对于on_session_destroyed对象的Document()方法。

但是,似乎migration guide删除了arguments的{​​{1}}参数(另请参见讨论here)。

问题:

是否存在一种变通方法,使我可以将server_session版本的username作为参数从Django传递给Bokeh?

1 个答案:

答案 0 :(得分:0)

对于Bokeh v1.0.4,您可以尝试:

script = server_document(url = bokeh_url, 
                         relative_urls = False, 
                         resources = 'default', 
                         arguments={"bokeh-session-id": bokeh_session_id, 
                                    "username": user.username } )

它返回脚本并允许使用arguments参数。

另一种选择是使用其他方法(例如, push_session()还允许参数并构造ClientSession

如果要通过用户检查身份验证,则可以pip install flask-user并执行:

@login_required
def my_view1(request):
    url_suffix = "/my_suffix"
    script = get_bokeh_script(request.user, url_suffix)
    return render(request,'dashboard/index.html',{'script':script})