这是一个非常基本的问题,因为我新使用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')
提前谢谢。
答案 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。