2017-09-16 58 views
0

我想有功能,每次得到的請求,並檢查該用戶登錄,然後再返回用戶對象,如果用戶登錄,否則重定向到登錄,所以這就是我試圖做Django的重定向不工作

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

我試圖用以下視圖中測試該功能時,用戶被loged出並請求沒有mainSession:

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

以及響應我得到這個: 「HttpResponseRedirect」對象沒有屬性「電子郵件」

而且我已做了版畫的迴應是:

  • 爲什麼3後重定向不會發生什麼我做錯了?

+0

爲什麼要呢?您從'email_activation'調用'is_login',並返回一個重定向對象。但是,這個觀點繼承了你所寫的其他代碼。 –

+0

有沒有什麼辦法讓我重定向?如果沒有你對這個問題的建議是什麼? – Saro

回答

0

首先。 Django有幾種方法可以實現內置。我強烈建議你使用已經制作好的東西。 login_required裝飾器對你的用例非常有用。現在

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

,如果你在做什麼是一個實驗。您遇到的問題是您要在is_login上返回響應重定向對象。你能做些什麼來完成這項工作(我再次建議你不要使用這條路線),是讓另一個重定向到登錄頁面的函數,並且如果用戶登錄或沒有,is_login函數只返回True或False 。

然後你就可以這樣做:

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

我們不使用在用戶模型中建立的django,所以我不能使用這個login_required裝飾器,我同意你寫第二個函數是不是像一個合適的解決方案 – Saro