2017-08-01 86 views
1

上週我開始使用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中執行諸如滑塊,下拉等的交互。

在此先感謝。

回答

2

我遇到了同樣的問題,無法添加與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