您可以使用修饰器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