问题:_cp_dispatch not getting called in cherrypy阐明_cp_dispatch仅在没有属性/方法与请求匹配时被称为。
但是,在我的代码中:
import cherrypy
class A(object):
def _cp_dispatch(self, vpath):
raise Exception(str(vpath))
@cherrypy.expose
def index(self):
return "start"
@cherrypy.expose
def method_1(self):
return "method_1"
cherrypy.quickstart(A())
为http://127.0.0.1:8080/garbage调用_cp_dispatch,但http://127.0.0.1:8080/method_1/garbage或http://127.0.0.1:8080/index/garbage不调用
我也需要它来调用它们。我可以看到 method_1 和 index 作为端点公开,但
答案 0 :(得分:3)
_cp_dispatched
。路径method_1/garbage
被解析为:
method_1
method_1
有一个名为garbage
且属exposed
并且可以调用的属性,请将其调用。method_1
预计会收到一个位置参数,如果没有,则引发一个说明未找到的异常。 BTW更好地定义名为default
而不是_cp_dispatch
的方法,该方法旨在用于创建新的自定义处理程序以处理该段的未定义路径。 e.g:
@cherrypy.expose
def default(self, *args, **kwargs):
"""Catch all method"""
return "Catch all method. {}, {}".format(args, kwargs)
澄清:method_1/garbage
等于def method_1(self, arg_1)
。请记住,cherrypy中的默认调度程序就像树一样。如果存在一个属性(分支),该属性具有对路径其余部分的解释控制,则可以始终组成clases而不是定义单个方法,作为替代方法使用Routes或Method调度程序。