"TypeError: object is not callable" 使用 'cherrypy.dispatch.MethodDispatcher()'



我正在遵循樱桃教程"给它一个休息",除了我想让我的樱桃服务器启动两个类:一个用于提供一些静态文件,另一个用于 RESTful API:

api.py:

import cherrypy
class TestApi(object):
    conf = {
        '/api/v1/test': {
            'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
        }
    }
    exposed = True
    def GET(self):
        return "Test GET!"

server.py:

import cherrypy
import api
server_conf = {
    'server.socket_port': 1313,
}

class Root(object):
    conf = {
        '/': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': "/some/path",
            'tools.staticdir.debug': True
        }
    }
    @cherrypy.expose
    def index(self):
        return "Hello world!"

if __name__ == '__main__':
    cherrypy.config.update(server_conf)
    cherrypy.tree.mount(Root(), '/', Root.conf)
    cherrypy.tree.mount(api.TestApi(), '/api/v1/test',
                        api.TestApi.conf)
    cherrypy.engine.start()
    cherrypy.engine.block()

但是,当我启动服务器(python server.py)并执行GET http://localhost:1313/api/v1/test时,出现此错误:

500 内部服务器错误

服务器遇到意外情况,阻止其 满足请求。

回溯(最近一次调用):文件 "/usr/local/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 670,回应 response.body = self.handler() File "/usr/local/lib/python2.7/site-packages/cherrypy/lib/encoding.py", 线路 217, 在通话中 self.body = self.oldhandler(*args, **kwargs) File "/usr/local/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 68,通话中 引发 x 类型错误:"TestApi"对象不可调用

我查找了类似的问题,并遇到了如何在同一个 cherry 应用程序中使用多个调度程序?,但不清楚那里的答案是否真的适用于我。 任何指示将不胜感激!

刚刚意识到问题出在TestApi.conf上:

需要在下面的部分中将配置的路径从 '/api/v1/test' 更改为 '/'

class TestApi(object):
    conf = {
        '/api/v1/test': {
            'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
        }
    }

我想这是因为我已经传入了server.py的挂载路径,因此配置路径从该点开始是相对的。

最新更新