2017-08-01 17 views
1

先週Bokehを使い始めました。とても新しく、Flask APIに埋め込まれたスライダとドロップダウンを使って対話型棒グラフを作成しようとしています。スライダーとドロップダウンでチャートを表示しますが、スライダー/ドロップダウン値を変更したときにチャートを動的に更新しません。Flask apiからBokeh autoload_serverへの引数の受け渡し

さらに研究を重ねると、インタラクションパートのために別のbokehサーバーを実行し、Flask APIからオートロードサーバーを呼び出す必要があることが分かりました。しかし、私の入力データはparamsをユーザ入力として持つ外部APIから来ているので、私はどのように私のhttp postパラメータをbokehサーバに送るのか分かりません。 Sending URL parameter from Flask to a Bokeh serverを参照する

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

私はそれにコメントすることはできませんよと、機能が自動ロードサーバーに引数を渡すために統合されているようだが、私はそれ上の任意のドキュメントを見つけるように見える傾けます。これを理解するのを手伝ってください。

ボークスサーバーを実行せずに、フラスコの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であること0.12.7より前のバージョンの場合autoload_server


ための最近追加された、シンプルな交換が、あなたはまた、クレジットがgにkevinsa5に行く(次の回避策を使用することができます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

クール、私はこれをしようと感謝を使用してアクセスすることができます。また、複数のbokeh apiを持つことも可能です(私は他に何を言いたいのかわかりません)。今は、bokeh-sliders.pyを使ってbokehサーバーを実行しています。しかし、私は複数のフラスコapiの別のグラフを呼び出すようにしたいので、私はそのbokeh-slider.pyファイルでいくつかのグラフを作成し、それぞれのグラフを呼び出すことができますか、または他の方法です – starFire

関連する問題