#2167·falcon

附加后的响应者与"正常"响应者之间的行为不同

作者: Sirtea创建于 2023年8月10日更新于 2026年9月2日
标签buggood first issue

我正在开发一个通用资源,其中包含所有的 API 操作(GET/POST 集合,GET/PUT/PATCH/DELETE 元素)。想法是通过传递一个 DAO 对象来重用此组件,使其真正具有通用性。想法是,某些资源应禁用所有方法,我用以下代码来实现这一点(最小化重现):

import falcon class GenericResource: def init(self, on_get_collection=True): if on_get_collection: self.on_get_collection = self._on_get_collection def _on_get_collection(self, req, resp): resp.media = {'message': 'on_get_collection'} app = falcon.App() res1 = GenericResource() res2 = GenericResource(on_get_collection=False) 当我启动 gunicorn 服务器时,我的应用程序崩溃: falcon.routing.util.SuffixedMethodNotFoundError: 没有找到指定后缀的响应器 此时,资源 "res2" 没有用处,因为它没有方法,我知道...但当我禁用所有 "集合" 方法时就会发生这种情况。如果我删除 suffix='collection',则每次请求都会收到 405,如下所示: import falcon class NoneResource: pass app = falcon.App() app.add_route('/res3', NoneResource())

下一个路由会崩溃...

app.add_route('/res4', NoneResource(), suffix='collection')

问题可以通过删除 "collection" add_route 来绕过,但我仍然认为 /res3(正常路由)和 /res4(后缀路由)应具有相同的行为,没有可用的方法...

内容来源: falconry/falcon