2012-01-15 55 views
2

我正在使用django,我寫了這個裝飾器去掉了我爲ajax視圖找到的一些重複代碼,我想知道你的意見(太基本,壞設計,試試這個,而不是,等等)。這是一個很好的蟒蛇設計?

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

對於http://s.tk/review,這是一個更好的問題。 – 2012-01-15 03:50:13

回答

2

是的,這看起來像一個典型和有效的裝飾使用。

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 
+0

謝謝,我在谷歌技術講座視頻中聽說過這個裝飾器,但他們剛剛提到,我想知道我在哪裏可以找到它。 – loki 2012-01-15 19:48:41