Django 1.9 ou usando django-braces
Django 1.9 introduziu um LoginRequiredMixin que é usado assim:
from django.contrib.auth.mixins import LoginRequiredMixin
class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
Se você estiver usando uma versão mais antiga do django, você pode usar praticamente o mesmo mixin do django-braces - a versão do Django foi baseada na versão django-braces. django-braces 1.4.x ainda suporta Django 1.4, então você pode usá-lo com versões bem antigas.
Métodos Antigos
Eu encontrei esta pergunta ao pesquisar no Google como decorar visualizações baseadas em classe, para adicionar a resposta para isso:
Isso é abordado na seção de documentação sobre a decoração de visualizações baseadas em classe . Existe o urls.pywrapper, ou você pode aplicar o decorador ao dispatch()método. Exemplos da documentação:
Decoração em URL conf
from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView
from .views import VoteView
urlpatterns = patterns('',
(r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))),
(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
)
Decorar a aula
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)
Consulte a documentação vinculada acima para obter mais detalhes.