" TypeError:对象不可调用"使用`cherrypy.dispatch.MethodDispatcher()`

时间:2016-01-14 20:03:38

标签: python cherrypy

我跟随樱桃教程"Give it a REST",除了我想让我的樱桃服务器启动两个类:一个用于提供一些静态文件,另一个用于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)并在http://localhost:1313/api/v1/test上执行GET时,我收到此错误:

  

500内部服务器错误

     

服务器遇到阻止它的意外情况   满足要求。

     

Traceback(最近一次调用最后一次):文件   " /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,在通话       raise x TypeError:' TestApi'对象不可调用

我抬起了类似的问题并且发现了 how to use multiple dispatchers in same cherrypy application?,但不清楚那里的答案是否真的适用于我。任何指针都将不胜感激!

1 个答案:

答案 0 :(得分:1)

刚刚意识到问题在于TestApi.conf:

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

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

我想这是因为我已经传递了server.py中的挂载路径,所以配置路径是相对于该点的。