pri*_*stc 5 python django decorator
我有这个装饰器,用于装饰django视图,如果share参数是True(由中间件处理)我不希望执行视图
class no_share(object):
def __init__(self, view):
self.view = view
def __call__(self, request, *args, **kwargs):
"""Don't let them in if it's shared"""
if kwargs.get('shared', True):
from django.http import Http404
raise Http404('not availiable for sharing')
return self.view(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
它目前的工作方式如下:
@no_share
def prefs(request, [...])
Run Code Online (Sandbox Code Playgroud)
但是我想稍微扩展一下这个功能,所以它会像这样工作:
@no_share('prefs')
def prefs(request, [...])
Run Code Online (Sandbox Code Playgroud)
我的问题是如何修改这个装饰器类,以便它接受额外的参数?
我希望布鲁斯·埃克尔的这篇文章有所帮助.
更新: 根据文章,您的代码将如下所示:
class no_share(object):
def __init__(self, arg1):
self.arg1 = arg1
def __call__(self, f):
"""Don't let them in if it's shared"""
# Do something with the argument passed to the decorator.
print 'Decorator arguments:', self.arg1
def wrapped_f(request, *args, **kwargs):
if kwargs.get('shared', True):
from django.http import Http404
raise Http404('not availiable for sharing')
f(request, *args, **kwargs)
return wrapped_f
Run Code Online (Sandbox Code Playgroud)
根据需要使用:
@no_share('prefs')
def prefs(request, [...])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |