Flask/Django服务器和Bokeh服务器

6

我希望使用Python 3.x实现一个动态的基于Web的仪表板(类似于R的Shiny)。

从我所读和在YouTube上看到的来看,Bokeh似乎很有前途。

不清楚的是,何时何地需要Bokeh服务器和Flask / Django服务器?它们是否相互补充?还是我可以使用其中任意一个?它们是否都会提供相同的服务?

1个回答

8
Bokeh服务器基于Tornado,它本身是一个功能强大的Python Web框架和异步网络库。根据您的需求,可能可以简单地编写一个Bokeh应用程序,让它以您想要的方式显示您想要的一切。 Bokeh通过Jinja2模板公开了一些自定义应用程序外观的功能。您可以在http://demo.bokeh.org上的Gapminder Demo中看到这个例子。
然而,您可能有更复杂的需求,特别是在身份验证和访问方面,或者需要将现有站点集成到Bokeh应用中。在这种情况下,您可能正在考虑将Bokeh应用程序嵌入到另一个页面中,该页面可能来自Flask、Django、IIS或其他任何地方。有两种基本方法可以做到这一点:
  • 使用server_document生成一个<script>标签,您可以将其模板化到您的页面中,这将在页面中嵌入来自Bokeh服务器的应用程序
  • 使用<iframe>将来自Bokeh服务器的URL嵌入页面中

任何一种方法都可以正常工作。根据您的部署环境的复杂程度,可能需要执行更多的“devops-y”类型的操作,以在代理或负载均衡器后面使用Bokeh服务器等。 运行Bokeh服务器部分的用户指南提供了更多信息,供任何需要深入了解这些细节的人参考。

如果您要将来自Bokeh服务器的应用程序嵌入到另一个网页中,则Bokeh服务器确实需要运行以提供该应用程序!如何实现这一点是一个单独的问题,有几种方法可以做到:

  • 作为外部进程启动,并使用类似于supervisord的工具进行管理。可以在https://github.com/bokeh/demo.bokeh.org中查看一个完整的示例部署。

  • 通过启动自己的Tornado IOLoop,将Bokeh服务器“嵌入”到您的Flask/Django/任何应用程序中。您可以在examples/howto/server_embed中看到这种技术的一个示例。此外,这可能应该被认为是相当高级的用法。


1
能否使用Bokeh服务器的Tornado IOLoop添加更多终端,从而构建完整的网络应用程序或以编程方式嵌入Bokeh服务器? - astrojuanlu
1
是的,我绝对这样认为,但据我所知,这也还没有被任何人彻底探索过。也许一些小改变会有助于使事情更容易或更简单。公共邮件列表可能是进一步讨论这个问题的最佳场所,因为SO并不真正适用于迭代、协作式的讨论。 - bigreddot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接