附加后的响应者与"正常"响应者之间的行为不同
我正在开发一个通用资源,其中包含所有的 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