【问题标题】:"TypeError: object is not callable" using `cherrypy.dispatch.MethodDispatcher()`“TypeError:对象不可调用”使用`cherrypy.dispatch.MethodDispatcher()`
【发布时间】: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?,但不清楚那里的答案是否真的适用于我。任何指针将不胜感激!

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

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

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

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

    我猜这是因为我已经在 server.py 中传递了挂载路径,所以从那时起配置路径是相对的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2021-04-15
    • 2011-10-01
    • 2020-11-10
    • 2017-09-09
    • 2016-07-23
    • 2015-03-07
    • 2013-11-14
    相关资源
    最近更新 更多