【发布时间】:2016-04-20 07:34:05
【问题描述】:
我正在关注cherrypy 教程"Give it a REST",除了我想让我的cherrypy 服务器启动两个类:一个用于提供一些静态文件,另一个用于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”,行 670,回应 response.body = self.handler() 文件 "/usr/local/lib/python2.7/site-packages/cherrypy/lib/encoding.py", 第 217 行,在 调用 self.body = self.oldhandler(*args, **kwargs) 文件“/usr/local/lib/python2.7/site-packages/cherrypy/_cpdispatch.py”,行 68,在通话 raise x TypeError: 'TestApi' 对象不可调用
我查找了类似的问题并遇到了 how to use multiple dispatchers in same cherrypy application?,但不清楚那里的答案是否真的适用于我。任何指针将不胜感激!
【问题讨论】: