2014-01-19 44 views
0

我使用djnago HttpResponseRedirect在登錄後返回上一頁。問題是,我給了一個錯誤的重定向網址(next網址和當前網址的組合)HttpResponseRedirect將傳遞的URL附加到當前的URL

假設我已經從「mysite.com/home」登錄並且登錄頁面的網址是「mysite.com/login」我想返回到「mysite.com/home」,但重定向網址是mysite.com/login/?next=/home/

我在做什麼錯了?

這裏是我的view,負責登錄:

if request.method == 'POST': 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 

      # next is "/home/" and that is exactly what I expect 
      return HttpResponseRedirect(request.GET.get('next', reverse('products.views.show_homePage'))) 
+0

顯示我們的'request.POST.get( '下一步')'之前調用重定向的精確值。 – mariodev

+0

由於'request.POST'原因導致「next = a url」位於查詢字符串中,但我仍然犯了一個錯誤,但該值仍與我在代碼(註釋部分)中提到的相同。 –

+0

此外,我改變了表單動作url在客戶端(javascript)的絕對路徑,並解決了這個問題,但我不知道什麼是錯的 –

回答

0

我有同樣的問題!

試試這個:

return HttpResponseRedirect(reverse('products.views.show_homePage')) 

確保顯然包括:from django.core.urlresolvers import reverse

這將使網頁發送重定向到您的主頁..希望..

這裏是我做過什麼:

登錄:

# Login 
def login(request): 
    if request.user.is_authenticated(): 
     return HttpResponseRedirect("/test/") # Redirect to a tool directory page. 
    form = loginForm(request.POST or None) 
    if request.POST and form.is_valid(): 
     user = form.login(request) 
     if user: 
      auth_login(request, user) 
      return HttpResponseRedirect("/test/") # Redirect to a success page. 
    return render(request, 'login.html', {'form': form}) 

註銷:

# Logout user method 
def logout(request): 
    auth_logout(request) 
    return HttpResponseRedirect(reverse('loginregistration.views.login')) # Redirect to a success page.