我跟随樱桃教程"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?,但不清楚那里的答案是否真的适用于我。任何指针都将不胜感激!
答案 0 :(得分:1)
刚刚意识到问题在于TestApi.conf:
需要在下面的部分中将配置的路径从'/api/v1/test'
更改为'/'
。
class TestApi(object):
conf = {
'/api/v1/test': {
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
}
}
我想这是因为我已经传递了server.py
中的挂载路径,所以配置路径是相对于该点的。