如何基于身份验证对某个URL使用不同的视图?

时间:2019-04-04 18:11:33

标签: django django-views django-urls

当请求/page-one网址时,如果用户已通过身份验证,则我想使用view_a,来宾访问者则使用view_b

代码应如下所示:

def dummy(request):
    if request.user.is_authenticated():
        print 'authuser' 
        return view_a(request) 
    else: 
        print 'unauth user'
        return view_b(request)

如何在Django中实现这一目标?

我看了看文档,但是找不到与此有关的任何指南。

2 个答案:

答案 0 :(得分:2)

您可以使用is_authenticated 在视图中使用它

if user.is_authenticated:
    return render(request, 'polls/detail.html', {'poll': p})
else:
    return render(request, 'polls/another-detail.html', {'poll': p})

答案 1 :(得分:1)

要重定向到不同的视图(而不仅仅是渲染不同的模板)

from django.urls import reverse
from django.http import HttpResponseRedirect

...

if user.is_authenticated:
    return HttpResponseRedirect(reverse('some_detail', kwargs={'pk': pk}))
else:
    return HttpResponseRedirect(reverse('another_detail', kwargs={'pk': pk}))

,在您的网址中,您必须“命名”视图

path('another_detail/<int:pk>/', views.another_detail, name='another_detail'),