2013-05-21 19 views

答えて

2

クラスベースのビューを使用する場合は、あなたが希望する機能を実装し、すべてのこれらのビュー(もdecoratorsを使用して)ための基本クラス/ミックスインを作成することができますし、すべてのビューは、このベースを継承していますビュー。

from django.views.generic import TemplateView 

class BaseView(TemplateView): 

    def get(self, request, *args, **kwargs): 
     # do some checking here 
     if not request.user.is_authenticated(): 
      # do something if anonymous user 
     return super(BaseView, self).get(request, *args, **kwargs) 


class MyView(BaseView): 
    pass 
6

url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'), 
+1

実際には、注釈をコントローラに移動するだけです。 –

+1

ええ、確かに、これは可読性と保守性の面で優れていると私は主張しています。私は、ミドルウェアを使用することは、(私が以前彼らが素晴らしいと思っていたので、以前は主張していたように)これを担当すべきではないと主張します。それは複雑さの1つの余分な層を導入し、あなたのルールのために免除されるかもしれないが論理的にその特定のappsのviews.pyに住む必要があるビューを妨害するでしょう。しかし、デコレータをviews.pyからurls.pyに移動する点で100%正しいです。 –

+0

私は知っている、それはOPにそれを指摘するだけで、これはより明白で透明です:-) –

1

あなたはディスパッチャを書くことができますが、あなたはモジュールの多くのURLを持っている場合、おそらくmiddleware層を作成するために、より便利になります。

参照:decorating-all-django-admin-views-1-4

関連する問題