首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何要求登录Django通用视图?

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

Stack Overflow用户
提问于 2010-01-26 23:59:28
回答 10查看 71.7K关注 0票数 91

我想限制对Django泛型视图处理的URL的访问。

就我的观点而言,我知道login_required decorator可以完成这项工作。创建/删除/更新泛型视图也需要login_required参数,但是我找不到一种方法来处理其他泛型视图。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-01-27 00:12:52

对于Django < 1.5,您可以通过将函数包装在urls中来添加装饰器,这允许您包装通用视图:

代码语言:javascript
复制
from django.contrib.auth.decorators import login_required
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
    (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}),
    )

基于函数的通用视图在Django 1.4中被弃用,并在Django 1.5中被删除。但同样的原理也适用,只是用login_required装饰器包装了基于类的视图的视图函数:

代码语言:javascript
复制
login_required(TemplateView.as_view(template_name='foo_index.html'))
票数 106
EN

Stack Overflow用户

发布于 2013-02-05 22:27:03

Django >= 1.9或使用django->=

Django 1.9引入了一个LoginRequiredMixin,它的用法如下:

代码语言:javascript
复制
from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

如果你使用的是一个旧版本的django,你可以使用与django-braces几乎相同的混合-- Django版本是基于django- based版本的。django-braces 1.4.x still supports Django 1.4,所以你可以在相当老的版本中使用它。

较旧的方法

当我在谷歌上搜索如何装饰基于类的视图时,我发现了这个问题,所以添加这个问题的答案:

decorating class based views上的文档部分对此进行了介绍。这里有urls.py包装器,或者您可以将装饰器应用于dispatch()方法。文档中的示例:

在URL conf中进行装饰

代码语言:javascript
复制
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())),
)

装饰类

代码语言:javascript
复制
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)

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

票数 108
EN

Stack Overflow用户

发布于 2011-05-05 08:17:21

在Django 1.3版本中,通用视图已从函数更改为对象。因此,需要对Will McCutchen和Will Hardy进行一些微小的更改,以与1.3版一起工作:

代码语言:javascript
复制
from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView

urlpatterns = patterns('',
    (r'^foo/$', login_required(TemplateView.as_view(template_name='foo_index.html'))),
)

此外,documentation还描述了如何做到这一点。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2140550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档