django中的登录限制

时间:2014-07-03 19:34:00

标签: python django login-required

这是一个非常基本的问题,因为我新使用django。我创建了一个登录表单,可以与我在数据库中的用户一起使用。问题是,如果我输入,例如,“localhost:8000 / Exi / index”它会转到主“主页”页面,问题显然是我希望用户只有在记录时才会看到此页面in。我尝试了

class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls):
        return login_required(super(LoginRequiredMixin, cls).as_view())

class Index (LoginRequiredMixin,TemplateView):
    template_name = 'index.html'  

但那对我不起作用。也许我没有看到的东西因为我在这里看了几个类似的问题,每个人似乎已经在他们的项目中解决了这个问题。 这是我对此页面的网址:

  

url(r'^ $',views.LoginView.as_view(),name ='login'),       url(r'^ index $',views.Index.as_view(),name ='index')

提前谢谢。

3 个答案:

答案 0 :(得分:2)

请参阅Django的文档:The login-required decorator

简单视图的文档示例:

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def my_view(request):
    ...

对于基于类的视图,您可以通过两种不同的方式使用装饰器,如文档中所述:Decorating class-based views

首先,在网址路由定义中:

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())),
)

第二种方式,在视图中:

class ProtectedView(TemplateView):
    template_name = 'secret.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ProtectedView, self).dispatch(*args, **kwargs)

答案 1 :(得分:2)

对于基于课程的观点,我建议您使用django-braces LoginRequiredMixin

from django.views.generic import TemplateView
from braces.views import LoginRequiredMixin


class YourSecuredView(LoginRequiredMixin, TemplateView):
    template_name = "yourtemplate.html"

请注意,LoginRequiredMixin必须是最左边的mixin。

答案 2 :(得分:0)

如果是网站范围的登录限制,您需要尝试https://github.com/mgrouchy/django-stronghold#stronghold