Django >= 1.9 或使用 django-braces
Django 1.9 引入了一个LoginRequiredMixin https://docs.djangoproject.com/en/3.1/topics/auth/default/#the-loginrequired-mixin其用法如下:
from django.contrib.auth.mixins import LoginRequiredMixin
class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
如果您使用的是旧版本的 django,您可以使用几乎相同的 mixinDjango 大括号 https://django-braces.readthedocs.org/en/latest/access.html#loginrequiredmixin- Django 版本基于 django-braces 版本。django-braces 1.4.x 仍然支持 Django 1.4 https://github.com/brack3t/django-braces/tree/v1.8.0#use-django-14x所以你可以将它与相当旧的版本一起使用。
旧方法
我在谷歌搜索如何装饰基于类的视图时发现了这个问题,因此添加答案:
这在文档部分中有介绍装饰基于类的视图 https://docs.djangoproject.com/en/1.5/topics/class-based-views/intro/#decorating-class-based-views。有的是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)
有关更多详细信息,请参阅上面链接的文档。