0

我想允許用戶在默認情況下要到他們的用戶頁面(如:mywebsite.com/userpage)時,他們使用的登錄表單。Django的 - 多次登錄重定向

此外,如果他們去網站上的其他一些受密碼保護的頁面重定向到登錄頁面,第一,一旦被認證讓他們回到他們試圖訪問原來的頁面。

這是我迄今爲止的登錄功能:

views.py

def user_login(request): 
    if request.method == 'POST': 
     form = AuthenticationForm(request.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) 
       # Redirect to a successpage 
       if request.POST['next']: 
        return HttpResponseRedirect(request.POST['next']) 
       else:  
        return HttpResponseRedirect("/" + username + "/") 
      else: 
       errors = 'This account has been disabeled.' 
     else: 
      # Return an 'invalid login' error message. 
      errors = 'There is a problem with the user name and/or the password. Please try again.' 
    else: 
     form = AuthenticationForm() 
    return render_to_response("registration/my_login.html", locals(), context_instance=RequestContext(request)) 

urls.py

urlpatterns = patterns('', 
         url(r'^login/$', user_login,), 

my_login.html

<form action="." method="post" >{% csrf_token %} 
    {{errors}} 
    {{ form.as_p }} 
    <p class="submit"><button type="submit" name="login_user_button" value="Login">Log in</button></p> 
    <input type="hidden" name="next" value="{{ next }}"> 
    </form> 

我的問題是,我不知道如何獲得「下一個」變量的值,所以我可以在我的user_login函數中使用它來進行重定向。

正如你可以看到我試着用request.POST['next']得到它,但配備了一個空字符串,因爲某些原因沒有價值得到簽署的「下一個」變量。

任何想法?

+0

Hi @avatar,檢查是否在views.py下一個參數來自POST或GET。也許你應該通過GET ['next']來替換POST ['next'] – danihp

+0

我只是看着生成的HTML頁面上的源代碼,下一個輸入字段如下所示:。因此,即使指向登錄頁面的網頁鏈接具有下一個值(即http://mywebsite.com/accounts/login/?next=/messages/),{{next}}也不會捕獲下一個值)。 – avatar

回答

2

我的建議 - 不要打擾與登錄功能周圍擰。你只是重新發明輪子。相反,使用自帶的django.auth模塊login view,並具有向用戶發送彈出式網頁(在settings.LOGIN_REDIRECT_URL定義的URL),他們需要去重定向他們。

這間視圖可以像下面這樣簡單的事情:

@login_required 
def index(request): 
    return redirect('user-page', request.user.username) 

請注意,我已經改變了重定向到使用命名視圖。如果用戶給出自己的用戶名與網站URL一致,則不需要發生奇怪的事情!

還要注意login_required裝飾。這會自動爲您提供所需的登錄頁面重定向。