python फ्लास्क में एक बोकेह ऐप एम्बेड करना




flask applet (2)

मैं फ्लास्क में एक कामकाजी बोक्ले एप्लेट को एम्बेड करने के लिए सख्त कोशिश कर रहा हूं, और ऐसा करने का उचित तरीका नहीं मिल सकता है। मैंने सभी उदाहरणों के बारे में देखा, लेकिन मुझे कोई नहीं मिल सकता है जिसमें डेटा को अपडेट करने की क्षमता शामिल है (सर्वोत्तम उदाहरण: sliders_applet)।

अगर मैं गलत नहीं हूं, तो मुझे डेटा बदलना (स्लाइडर्स आदि के साथ) में सक्षम होने के लिए बोके-सर्वर की ज़रूरत है। एप्लेट को इस तरीके से काम करना शुरू करना, जैसे:

bokeh-server --script sliders_app.py

लेकिन मुझे फ्लास्क में स्लाइडर्स_प एम्बेड करने के लिए उचित, या कम से कम एक काम करने का तरीका नहीं मिल रहा है और चूंकि यह कई एप्लेट्स का उपयोग करना संभव है, इसलिए मुझे बोके सर्वर के स्टार्टअप पर एक एकल ऐपलेट को निर्दिष्ट करने के लिए साफ नहीं लगता ..

मैं ख़ुशी से किसी भी मदद की सराहना करता हूं- बोकेह मेरे लिए एक महान उपकरण जैसा दिखता है


दूसरा जवाब एक बोके सर्वर ऐप एम्बेड करने का वर्णन नहीं करता है (यह एक स्वसंपूर्ण बोके दस्तावेज़ एम्बेड करने के लिए components का उपयोग करता है)

सबसे पहले, आप यहां रहने वाले बहुत सारे लाइव उदाहरण देख सकते हैं: https://demo.bokehplots.com/

ऐप डाउनलोड करने के लिए दो सामान्य विकल्प हैं:

  • iframes (ठीक काम करता है), या
  • autoload_server

बाद में आमतौर पर इस तरह प्रयोग किया जाता है:

script = autoload_server(model=None,
                         app_path="/apps/slider",
                         url="https://demo.bokehplots.com")

यह नीचे एक के समान एक <script> टैग वापस करेगा, जहां आप ऐप को दिखाना चाहते हैं, आप अपने फ्लास्क एचटीएमएल प्रतिक्रिया में डाल सकते हैं:

<script
    src="https://demo.bokehplots.com/apps/slider/autoload.js?bokeh-autoload-element=c5c9bdb5-40e8-46a2-9bf0-40a9d396ce97"
    id="c5c9bdb5-40e8-46a2-9bf0-40a9d396ce97"
    data-bokeh-model-id=""
    data-bokeh-doc-id=""
></script>

अंत में, यह ध्यान रखना ज़रूरी है कि डिफ़ॉल्ट रूप से बोकेह सर्वर एक काफी रूढ़िवादी नेटवर्क कॉन्फ़िगरेशन के लिए विकल्प चुनता है। आपको --allow-websocket-origin सर्वर को --allow-websocket-origin कमांड लाइन विकल्प के साथ शुरू करने की आवश्यकता होगी जो आप होस्ट किए जाने वाले होस्ट को --allow-websocket-origin ऐप को एम्बेड कर रहे हैं।


Bokeh परियोजना के मुख्य डेवलपर्स में से एक के द्वारा संपादित करें नीचे दी गई जानकारी ऊपर दिए गए प्रश्न का उत्तर नहीं देती है। यह नीचे बताए अनुसार bokeh.embed.components उपयोग से एक बोके आवेदन को एम्बेड करने के लिए स्पष्ट रूप से असंभव है। components को केवल स्टैंडअलोन ड्यूट्यूमेंन्ट्स एम्बेड करने में सक्षम है (यानी यह एक बोके सर्वर पर नहीं चलते हैं)

बोके के साथ बोकहे एम्बेड करने का एक उदाहरण बोके गितूब रेपो पर मौजूद है।

import flask

from bokeh.embed import components
from bokeh.plotting import figure
from bokeh.resources import INLINE
from bokeh.templates import RESOURCES
from bokeh.util.string import encode_utf8

app = flask.Flask(__name__)

colors = {
    'Black': '#000000',
    'Red':   '#FF0000',
    'Green': '#00FF00',
    'Blue':  '#0000FF',
}


def getitem(obj, item, default):
    if item not in obj:
        return default
    else:
        return obj[item]


@app.route("/")
def polynomial():
    """ Very simple embedding of a polynomial chart"""
    # Grab the inputs arguments from the URL
    # This is automated by the button
    args = flask.request.args

    # Get all the form arguments in the url with defaults
    color = colors[getitem(args, 'color', 'Black')]
    _from = int(getitem(args, '_from', 0))
    to = int(getitem(args, 'to', 10))

    # Create a polynomial line graph
    x = list(range(_from, to + 1))
    fig = figure(title="Polynomial")
    fig.line(x, [i ** 2 for i in x], color=color, line_width=2)

    # Configure resources to include BokehJS inline in the document.
    # For more details see:
    #   http://bokeh.pydata.org/en/latest/docs/reference/resources_embedding.html#module-bokeh.resources
    plot_resources = RESOURCES.render(
        js_raw=INLINE.js_raw,
        css_raw=INLINE.css_raw,
        js_files=INLINE.js_files,
        css_files=INLINE.css_files,
    )

    # For more details see:
    #   http://bokeh.pydata.org/en/latest/docs/user_guide/embedding.html#components
    script, div = components(fig, INLINE)
    html = flask.render_template(
        'embed.html',
        plot_script=script, plot_div=div, plot_resources=plot_resources,
        color=color, _from=_from, to=to
    )
    return encode_utf8(html)


def main():
    app.debug = True
    app.run()

if __name__ == "__main__":
    main()

एक और विचार को bokeh-server और आपके flask वेब ऐप के साथ-साथ चलाना होगा, और बोके-कोड को उस तरीके से लोड करना होगा (सर्वर साइड या जे एस या आईफ्रेम के जरिए), लेकिन यह परेशानी हो सकती है।





bokeh