Django 1.9 или использование django-фигурных скобок
Django 1.9 представил LoginRequiredMixin , который используется следующим образом:
from django.contrib.auth.mixins import LoginRequiredMixin
class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
Если вы используете старую версию django, вы можете использовать почти тот же миксин из django-braces - версия Django была основана на версии django-braces. django-braces 1.4.x по-прежнему поддерживает Django 1.4 , поэтому вы можете использовать его с довольно старыми версиями.
Старые методы
Я нашел этот вопрос, когда гуглил, как украсить представления на основе классов, поэтому добавлю ответ для этого:
Это описано в разделе документации по украшению представлений на основе классов . Существует оболочка urls.py
, или вы можете применить декоратор к методу dispatch()
. Примеры из документации:
Декорирование в 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())),
)
Украшение класса
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)
Подробнее см. В документации, указанной выше.