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

如何将带参数的Bottle API集成到Python类方法中?

解决Bottle框架API与Python类集成的问题

我来帮你搞定这个问题!你遇到的核心问题是对Bottle路由的注册方式理解有误,咱们一步步拆解:

为什么第一个写法会报错?

你写的这段代码:

bottle.get("/generic_url")(my_api.generic_function(input))

犯了两个关键错误:

  1. 你直接调用了generic_function(input),而不是传递函数本身。这会让Python立即执行这个函数,但此时input变量根本没定义,就算定义了,函数返回的是一个字符串,而不是Bottle需要的可调用函数对象。
  2. Bottle收到这个字符串后,误以为它是一个视图函数的名称(比如模块里的函数),所以尝试去导入名为Generic Function Result的模块,这就是你看到ModuleNotFoundError的原因。

为什么第二个写法能运行但不符合需求?

第二个版本里,你传递的是my_api.generic_function这个函数对象,所以Bottle能正确注册路由,但因为函数没有定义参数,自然无法接收任何输入。

正确的实现方式

根据你需要接收输入的场景,有两种常见的实现方案:

方案1:接收路径参数

如果输入是URL路径的一部分(比如/generic_url/your_input),可以这样写:

import bottle
from bottle import run

class Rest_API:
    def __init__(self):
        pass
    def generic_function(self, input):
        return f"Generic Function Result: {input}"

my_api = Rest_API()

# 在路由路径中用<参数名>定义路径参数,会自动传给类方法
bottle.get("/generic_url/<input>")(my_api.generic_function)

run(host='localhost', port=8080, debug=True)

现在访问http://localhost:8080/generic_url/hello_world,就能得到返回结果:Generic Function Result: hello_world。

方案2:接收查询参数

如果输入是URL的查询参数(比如/generic_url?input=your_value),可以借助Bottle的request对象获取:

import bottle
from bottle import run, request

class Rest_API:
    def __init__(self):
        pass
    def generic_function(self):
        # 从查询参数中获取input,第二个参数是默认值(可选)
        input_val = request.query.get('input', 'default_input')
        return f"Generic Function Result: {input_val}"

my_api = Rest_API()

bottle.get("/generic_url")(my_api.generic_function)

run(host='localhost', port=8080, debug=True)

访问http://localhost:8080/generic_url?input=test_param,就能得到对应的结果。

关键要点总结

  • 给Bottle路由注册时,一定要传递函数对象(比如my_api.generic_function),而不是函数的调用结果(比如my_api.generic_function(input))
  • 路径参数通过路由路径中的<参数名>定义,类方法需要接受同名参数
  • 查询参数、请求体等数据,通过Bottle提供的request对象来获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:22:29