如何要求登录 Django 通用视图?

2024-03-01

我想限制对 Django 通用视图处理的 URL 的访问。

对于我的观点,我知道login_required装饰者 https://docs.djangoproject.com/en/1.10/topics/auth/default/#the-login-required-decorator完成工作。 还可以创建/删除/更新通用视图login_required争论,但我找不到为其他通用视图执行此操作的方法。


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)

有关更多详细信息,请参阅上面链接的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何要求登录 Django 通用视图? 的相关文章

随机推荐