这是一个很好的python设计吗?

时间:2012-01-15 03:45:50

标签: python django decorator

我正在使用django并且我编写了这个装饰器来带走我为ajax视图找到的一些重复代码,我想知道你的意见(太基本,糟糕的设计,试试这个,好吧等等)。< / p>

def ajax_only(func):
    def _ajax_only(request,*args,**kwargs):
        if not request.is_ajax():
            return HttpResponse('<p>Ajax not supported.</p>')
        else:
            return func(request,*args,**kwargs)
    return _ajax_only

2 个答案:

答案 0 :(得分:5)

我在这里唯一的另一个提示是建议使用functools.wraps装饰器 - 它允许装饰函数保留一些属性(例如函数名称),这使得调试更容易 - 上面的代码就像:

from functools import wraps
def ajax_only(func):
    @wraps(func)
    def _ajax_only(request,*args,**kwargs):
        if not request.is_ajax():
            return HttpResponse('<p>Ajax not supported.</p>')
        else:
            return func(request,*args,**kwargs)
    return _ajax_only

答案 1 :(得分:2)

是的,这看起来像装饰器的典型和有效使用。