gpt4 book ai didi

python - 装饰作为类方法实现的 Pyramid View

转载 作者:行者123 更新时间:2023-11-28 22:53:47 25 4
gpt4 key购买 nike

我的 Pyramid 项目中有这样的代码:

class SomeViews(object):

@view_config(...)
def view_a(request):
return {...}

@view_config(...)
def view_b(request):
return {...}

我想修饰 View 方法来修改返回的字典。可以将装饰器应用于 View ,如果它是 view_config 之前的第一个。否则,由于 Venusian 的性质,Pyramid 仍在使用原始功能。

因为我会对类中的所有方法应用相同的装饰器,所以我更愿意使用类装饰器。所以不要做

    @view_config(...)
@my_decorator("some_meta_info")
def view_b(request):
return {...}

对于每种方法,我想做

@my_decorator("some_meta_info")
class SomeViews(object):
...

但是因为类装饰器是在 view_config 调用之后执行的,所以它再次不适用于 Venusian。我查看了 view_defaults 实现,以获取如何解决我的问题的提示,但我没有弄清楚它是如何工作的。

任何提示如何做到这一点?我想要做的,只是修改一组 View 方法的结果字典。我也考虑过使用 BeforeRender 事件,但我发现没有办法以我可以在事件处理程序中访问它的方式注入(inject)所需的元数据。在我看来,使用装饰器无论如何都是更自然和 Pythonic 的方式。

最佳答案

import functools

def my_decorator(value):
def _dec(f):
@functools.wraps(f)
def wrapper(context, request):
print 'hey look!', value
return f(context, request)
return wrapper
return _dec

@view_defaults(decorator=my_decorator('some meta info'))
class SomeViews(object):
def __init__(self, request):
self.request = request

@view_config(..., renderer='string')
def view_a(self):
return 'foo'

view_defaults 视为传递给类中每个 view_config 的默认选项。但是,如果您向 view_config 添加装饰器,默认值将被覆盖,您的默认装饰器将被删除。

关于python - 装饰作为类方法实现的 Pyramid View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com