django重定向不起作用

时间:2017-09-16 11:12:06

标签: django redirect url-redirection

我想拥有每次获取请求并检查用户是否登录的功能,如果用户登录则返回用户对象,否则重定向到登录,这就是我试图做的事情

def is_login(request):
    userID = request.session.get('mainSession', 0)
    next = resolve(request.path_info).url_name
    print(1)
    if userID != 0:
        print(2)
        user = msignup.objects.filter(id=userID).first()
        return user
    print(3)
    return HttpResponseRedirect(reverse('login') + "?next=
{}".format(next))

当用户被挂出并且请求没有mainSession时,我尝试使用以下视图测试此函数:

def email_activation(request):
    user = is_login(request)
    print(4)
    email = user.email
    return render(request, 'account/emailActivation.html',{'email': 
email})

作为回应我得到了这个: ' HttpResponseRedirect'对象没有属性'电子邮件'

我对照片的回应是:

  • 1
  • 3
  • 4

    为什么3次重定向没有发生?我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先。 Django有几种方法可以做这个内置的。我强烈建议你使用已经制作的东西。 login_required装饰器非常适合您的用例。

https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.decorators.login_required

现在,如果你正在做的是一个实验。您遇到的问题是您在is_login上返回响应Redirect对象。你可以做些什么来使这项工作(我再次建议你不要使用这条路线),是另一个重定向到登录页面的函数,并且如果用户登录则让is_login函数返回True或False

然后你就可以做类似的事情:

if not is_login(request):
   return redirectToSigninPage(request)