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

Web2py:如何通过表单输入运行Notebook并展示可视化结果?

Web2py表单传值+图表展示解决方案

1. 接收表单提交数据

在你的default.py控制器里,直接通过表单对象提取用户提交的输入值:

def index():
    # 替换成你的SQLForm实例化代码
    form = SQLForm(db.your_table)
    if form.accepts(request.vars, session):
        # 从form.vars中获取字段值,字段名需和表单定义一致
        first_name = form.vars.first_name
        last_name = form.vars.last_name
        stadium = form.vars.stadium
        # 调用图表生成函数,拿到图片文件名
        chart_file = make_spraychart(first_name, last_name, stadium)
        # 将数据传递给视图
        return dict(form=form, chart_file=chart_file)
    # 表单未提交或验证失败时,返回表单
    return dict(form=form)

2. 封装图表生成逻辑

把pybaseball生成图表的代码封装成独立函数,注意将图片保存到Web2py的static目录(只有该目录下的文件能被前端访问):

import matplotlib.pyplot as plt
from pybaseball import spraychart

# 强制matplotlib使用无GUI后端,适配PythonAnywhere环境
plt.switch_backend('Agg')

def make_spraychart(first_name, last_name, stadium):
    try:
        # 生成spraychart,替换为你的实际数据处理逻辑
        fig, ax = plt.subplots(figsize=(10,8))
        spraychart(first_name, last_name, park=stadium, ax=ax)
        # 生成唯一文件名避免冲突
        filename = f"spray_{first_name.lower()}_{last_name.lower()}_{stadium.lower()}.png"
        save_path = f"{request.folder}/static/{filename}"
        plt.savefig(save_path, bbox_inches='tight')
        plt.close(fig)  # 关闭画布释放内存
        return filename
    except Exception as e:
        # 捕获错误并返回信息
        return str(e)

注意:PythonAnywhere上需提前安装依赖,执行pip install pybaseball matplotlib即可。

3. 在视图中展示图表

打开views/default/index.html,添加图表展示逻辑:

{{extend 'layout.html'}}

<!-- 渲染表单 -->
{{=form}}

<!-- 展示生成的图表或错误信息 -->
{{if chart_file:}}
    <div class="chart-container">
        <h3>Spray Chart Result:</h3>
        <img src="{{=URL('static', chart_file)}}" alt="Player Spray Chart">
    </div>
{{elif chart_file is not None:}}
    <p style="color:red;">生成失败: {{=chart_file}}</p>
{{endif}}

关键注意事项

  • 静态文件清理:用户多次提交会导致static目录积累大量图片,可在生成新图表前删除旧同名文件,或定期清理。
  • 表单验证:给SQLForm字段添加必填规则,比如db.your_table.first_name.requires = IS_NOT_EMPTY(),避免空值传入脚本。
  • 权限检查:确保PythonAnywhere上Web2py的static目录有写入权限,默认情况下权限是足够的,若保存失败可排查目录权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:21:08