gpt4 book ai didi

python - 使用 Tornado 显示 Bokeh 生成的文件

转载 作者:行者123 更新时间:2023-12-01 05:06:15 25 4
gpt4 key购买 nike

我正在尝试开发一个可以上传文件的网站,然后在后面分析该文件以生成交互式图形(散点图和直方图),然后返回到浏览器供用户操作。 (想象一下将 Excel 放在网上,以便可以上传文件、获取图形并操作图形。)我考虑了各种选项,并决定使用 Bokeh 进行绘图。我编写了一个 python 脚本和一个 html 页面来上传文件。使用 Bokeh,我能够创建一个输出文件(例如“plot.html”)。这效果很好。

另外,我安装了Tornado,这样我就可以上传并动态读取一个简单的文件(例如“test.txt”),并简单地在output.html中返回文件的内容。所以这很有效。

但是,当我修改为 Tornado 使用而编写的脚本以使其显示较早的 Bokeh 生成的plot.html 时,这不起作用。 Bokeh 生成的 html(包含绘图对象)是否有任何内容无法由 Tornado 正确渲染?例如,我读到数据库搜索中的条目可能包含无法序列化的元素,并且需要删除不可序列化的元素才能显示搜索结果。我想知道是否会发生类似的事情。

以下是一些相关脚本:

display.py:用于读取并返回文件的内容 Tornado 。这可以工作并返回 test.txt 的内容,如下所示 预计。

import os.path
import random
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=80, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html')
class OutputHandler(tornado.web.RequestHandler):
def post(self):
fname = self.get_argument('upfile')
f = open(fname, 'r')
lines = f.readlines()
self.render('plot.html', content=lines)
if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application(
handlers=[(r'/', IndexHandler), (r'/content', OutputHandler)],
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
debug=True
)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

plot.py:用于使用 Bokeh 读取和生成绘图。这有效 并创建包含生成的图的plot.html。

from bokeh.plotting import *
output_file("plot.html")
filename = 'test.dat'
f=open(filename,'r')
#####
# deleted lines for manipulating data
#####
scatter(ndarray[:1000,0], ndarray[:1000,1], color='red', alpha=0.7)
quad(top=hist, bottom=np.zeros(len(hist)), left=edges[:-1], right=edges[1:],
fill_color="#036564", line_color="#033649")

display_plot.py:用于通过Tornado显示Bokeh生成的plot.html。这不起作用。

import os.path
import random
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=80, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render('plot.html')

# the rest the same as in display.py for now.

这最后一个脚本让我认为显示包含绘图对象的 Bokeh 生成的 html 与显示其他仅包含文本和图形的 html 文件不同,后者可以正确渲染。这是真的吗?我可以做什么来使用 Tornado(或任何与此相关的网络服务)显示plot.html?

感谢您的帮助。

最佳答案

RequestHandler.render 将文件解释为 Tornado 模板。这意味着某些字符序列(尤其是双花括号 {{ }})具有特殊含义。如果您只想按原样提供文件,请使用 write 而不是 render:

with open('plot.html') as f:
self.write(f.read())

关于python - 使用 Tornado 显示 Bokeh 生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24985038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com