确保 Pyramid 应用程序中的每个视图都使用自定义装饰器进行装饰

Ensuring every view in Pyramid app is decorated with custom decorator

根据 http://pyramid-cookbook.readthedocs.org/en/latest/views/chaining_decorators.html 我可以装饰金字塔视图:

@view_config(decorator=a_special_decorator, renderer='json')
def myview(request):
    return {'a':1}

好的,但我需要确保 Pyramid 应用程序中的 每个 视图都装饰有 a_special_decorator。有没有办法确保,无论是在实时应用程序还是在测试阶段,都是如此?

我认为更好的方法是:使用基于 class 的视图并从具有您要添加的设施的同一基础 class 继承所有视图。

但是,如果您想装饰应用程序中的所有视图,则方法如下

  • 创建一个scan()方法,将Python模块作为输入并通读,有点类似于Pyramid自带的扫描

  • 如果您的 scan() 找到一个视图函数签名,它会装饰该函数并就地替换模块中的原始函数

  • 在 letter Pyramid 本身扫描模块之前调用您的自定义扫描,以便 Pyramid 将获取 "fixed" 函数