您可以使用修飾器method_decorator
,如docs所示。
從文檔:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProtectedView, self).dispatch(*args, **kwargs)
或者你可以在你的urls.py做到這一點:
from django.conf.urls import patterns
from django.contrib.auth.decorators import login_required
from myapp.views import MyView
urlpatterns = patterns('',
(r'^about/', login_required(MyView.as_view())),
)
更新:
由於Django的1.9,你現在可以使用的方法裝修者在課堂上的水平。您需要傳遞要裝飾的方法的名稱。所以沒有必要爲了應用裝飾器而重寫dispatch。
實施例:
@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'
此外,可以定義裝飾的列表或元組,並使用此而不是調用method_decorator()
多次。
示例(下面的兩個類是相同的):
decorators = [never_cache, login_required]
@method_decorator(decorators, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(never_cache, name='dispatch')
@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'
這是否'@method_decorator(login_required)'只會增加我的裝飾來分派方法保存所有它的默認功能? – micgeronimo 2015-01-26 18:57:11
是的,除非我誤解默認功能的含義。 – schillingt 2015-01-26 19:27:13