特定のモジュール内のすべてのビューが、ユーザが許可されている場合にのみ使用可能になると思われる場合や、チェック。djangoの(モジュールの)すべてのビューにデコレータを適用する方法
ファイル全体にアノテーションを繰り返さないようにするにはどうすればよいですか?あなたのURLで
特定のモジュール内のすべてのビューが、ユーザが許可されている場合にのみ使用可能になると思われる場合や、チェック。djangoの(モジュールの)すべてのビューにデコレータを適用する方法
ファイル全体にアノテーションを繰り返さないようにするにはどうすればよいですか?あなたのURLで
クラスベースのビューを使用する場合は、あなたが希望する機能を実装し、すべてのこれらのビュー(も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
url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'),
あなたはディスパッチャを書くことができますが、あなたはモジュールの多くのURLを持っている場合、おそらくmiddleware層を作成するために、より便利になります。
実際には、注釈をコントローラに移動するだけです。 –
ええ、確かに、これは可読性と保守性の面で優れていると私は主張しています。私は、ミドルウェアを使用することは、(私が以前彼らが素晴らしいと思っていたので、以前は主張していたように)これを担当すべきではないと主張します。それは複雑さの1つの余分な層を導入し、あなたのルールのために免除されるかもしれないが論理的にその特定のappsのviews.pyに住む必要があるビューを妨害するでしょう。しかし、デコレータをviews.pyからurls.pyに移動する点で100%正しいです。 –
私は知っている、それはOPにそれを指摘するだけで、これはより明白で透明です:-) –