You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否构建API调用Bokeh的components函数向前端提供对应标签?

当然可以!完全可以搭建一个API来调用Bokeh的components()函数,把生成的前端所需标签(script和div)返回给前端。下面我用Flask框架给你演示一个完整的实现方案,你可以直接参考复用:

实现步骤

1. 安装依赖

首先确保你安装了所需的包:

pip install flask bokeh flask-cors

(注:flask-cors是用来处理跨域请求的,如果你的前端和API部署在同一域名下,可以不用安装)

2. 编写后端API代码

下面是一个简单的Flask API示例,它会生成一个Bokeh散点图,然后调用components()函数把结果返回给前端:

from flask import Flask, jsonify
from flask_cors import CORS
from bokeh.plotting import figure
from bokeh.embed import components

app = Flask(__name__)
CORS(app)  # 允许跨域请求

@app.route('/api/bokeh-components', methods=['GET'])
def get_bokeh_components():
    # 生成一个简单的Bokeh图表
    p = figure(title="示例散点图", x_axis_label='X', y_axis_label='Y')
    p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=15, color="navy", alpha=0.5)
    
    # 调用components函数获取script和div
    script, div = components(p)
    
    # 以JSON格式返回给前端
    return jsonify({
        'script': script,
        'div': div
    })

if __name__ == '__main__':
    app.run(debug=True)

3. 前端调用示例

前端可以通过AJAX请求这个API,然后把返回的div插入页面,再加载script来渲染图表。这里用原生JavaScript演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bokeh 图表展示</title>
    <!-- 引入Bokeh的CSS和JS(注意版本要和后端使用的Bokeh版本一致) -->
    <link rel="stylesheet" href="https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.css">
    <script src="https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js"></script>
</head>
<body>
    <div id="chart-container"></div>

    <script>
        // 请求API获取components
        fetch('http://localhost:5000/api/bokeh-components')
            .then(response => response.json())
            .then(data => {
                // 将div插入到页面容器中
                document.getElementById('chart-container').innerHTML = data.div;
                // 执行script代码渲染图表
                const script = document.createElement('script');
                script.innerHTML = data.script;
                document.body.appendChild(script);
            })
            .catch(error => console.error('获取Bokeh组件失败:', error));
    </script>
</body>
</html>

关键说明

  • components()函数的核心作用是把Bokeh对象转换成前端可以直接使用的两个字符串:script包含渲染图表的JavaScript逻辑,div是图表的HTML容器。
  • 确保前后端使用的Bokeh版本一致,否则可能出现兼容性问题。你可以在后端通过bokeh.__version__查看版本,然后对应修改前端CDN链接的版本号。
  • 如果用FastAPI替代Flask,实现逻辑类似:生成图表、调用components()、返回JSON即可,只是语法略有不同。

内容的提问来源于stack exchange,提问作者Rags Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:25