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

Flask预测应用遇端点覆盖及路径报错,请求解决方案

问题解决:Flask应用中的端点覆盖与模型/模板加载问题

1. 解决View function mapping is overwriting an existing endpoint function: app_calculation错误

这个错误的核心原因是同一个视图函数被重复绑定到了同一个路由,常见触发场景:

  • 代码在交互式环境中被重复执行(比如多次运行代码块)
  • 函数定义或路由装饰器被多次调用

修复方案:

  • 确保整个Flask应用代码只执行一次,避免重复运行包含@app.route和def app_calculation()的代码块
  • 重启应用进程,清除重复注册的路由绑定

2. 解决模型加载与模板路径报错问题

2.1 优化模型加载逻辑

你的set_params函数每次调用都会重新加载模型,这不仅效率极低,还可能因重复加载引发资源冲突或路径解析错误。应将模型加载放到函数外部,仅初始化一次:

# 全局加载模型(仅执行一次)
model = keras.models.load_model("D:/Авито/App/k_m/")

def set_params(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12):
    # 模型输入需为二维数组,修正原写法的维度问题
    input_data = np.array([[param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12]])
    prediction = model.predict(input_data)
    return prediction[0][0]

2.2 修复模板路径问题

Flask默认从应用根目录下的templates文件夹加载模板,使用绝对路径易出现权限或路径解析问题。推荐两种处理方式:

  1. 将index.html移动到应用根目录下的templates文件夹(如D:/Авито/App/templates/),修改render_template调用为相对路径:
return render_template("index.html", message=message)
  1. 若必须使用自定义绝对路径,直接配置Flask的模板目录:
app = Flask(__name__, template_folder="D:/Авито/App/Прогнозы")

完整修复后的代码示例

import numpy as np
import tensorflow as tf
from tensorflow import keras
from flask import Flask, request, render_template

# 初始化Flask应用并配置模板目录
app = Flask(__name__, template_folder="D:/Авито/App/Прогнозы")

# 全局加载模型(仅执行一次)
model = keras.models.load_model("D:/Авито/App/k_m/")

def set_params(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12):
    input_data = np.array([[param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12]])
    prediction = model.predict(input_data)
    return prediction[0][0]

@app.route('/', methods=['POST', 'GET'])
def app_calculation():
    param_lst = []
    message = ''
    if request.method == 'POST':
        # 读取表单参数并转换为数值类型,增加空值判断
        for i in range(1, 13):
            param = request.form.get(f'param{i}')
            if param is not None:
                param_lst.append(float(param))
        
        if len(param_lst) == 12:
            message = set_params(*param_lst)
        else:
            message = "参数输入不完整,请检查所有字段"

    return render_template("index.html", message=message)

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

额外注意事项

  • 确保模型路径下包含完整的Keras模型文件(如.h5文件或SavedModel格式文件夹)
  • 表单提交的参数需为可转换为float的数值,避免类型转换错误
  • 开启debug=True可在开发时查看详细错误信息,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:35:21