【问题标题】:Ambiguous behaviour of _cp_dispatch in cherrypy_cp_dispatch 在cherrypy中的模棱两可的行为
【发布时间】:2017-12-14 17:02:52
【问题描述】:

问题:_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/garbagehttp://127.0.0.1:8080/index/garbage 不调用

我也需要为这些调用它。我可以看到 method_1index 作为端点公开,但 没有任何端点method_1/垃圾。那么为什么不调用 _cp_dispatch 呢?

【问题讨论】:

    标签: web-services rest cherrypy endpoint


    【解决方案1】:

    _cp_dispatched 在没有属性匹配 url 的第一段时被调用。路径method_1/garbage 解析如下:

    1. 查找名为method_1 的属性
    2. 如果method_1 有一个名为garbage 的属性并且是exposed 并且可调用,则调用它。
    3. 否则method_1 预计会收到一个位置参数,如果没有,则引发异常,说明未找到。

    顺便说一句,最好定义一个名为 default 而不是 _cp_dispatch 的方法,该方法旨在用于创建新的自定义处理程序来处理段的未定义路径。例如:

    @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 中的默认调度程序的行为就像一棵树。如果存在一个属性(分支),则该属性可以控制路径其余部分的解释,您始终可以组合类而不是定义单个方法,作为替代方法,使用 Routes 或 Method 调度程序。

    【讨论】:

    • 感谢您的回答,能否请您详细说明第 3 点。具体来说,您所说的“期待立场争论”是什么意思?你的意思是它需要类似 method1(garbage=something) 的东西吗?
    • 是的,参数的名称仅在通过“查询字符串”传递时才相关。例如,如果您有一个定义为method1(garbage=None) 的函数,则可以使用这三个url 调用该函数:/method/method1/foo/method1?garbage=bar。在第一种情况下,garbage==None,第二,garbage==foo和第三garbage==bar,如果您使用POST,您可以在正文中发送garbage字段,这也将通过相同的方法进行匹配。从cherrypy的角度,查询字符串、url段和url编码形式,一切都变成了一个“参数”。
    • @cyraxjoe default 是标准的cherrypy方法还是任何名称都可以,只要它捕获所有参数?
    • 是标准的CherryPy方法,看看这个教程:github.com/cherrypy/cherrypy/blob/master/cherrypy/tutorial/…
    猜你喜欢
    • 2018-07-28
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2012-06-09
    • 2011-01-09
    相关资源
    最近更新 更多