2012-01-15 3 views
2

私はdjangoを使用しています。私はこのデコレータを書いて、Ajaxビューのために見つけた繰り返しコードを取り除きました。あなたの意見を知りたい(あまりにも基本的で、悪いデザイン、代わりにこれを試してみてください。これは良いpythonデザインですか?

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のより良い質問です。 –

答えて

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

ありがとう、私はGoogleの技術話ビデオのそのデコレータについて聞いたが、彼らはちょうど言及し、私はそれを見つけることができたのだろうかと思っていた。 – loki

関連する問題