2015-05-16 42 views
0

我已經成功地做到了,所以用戶必須登錄才能查看他們的個人資料,但是,我只希望用戶能夠查看他們的個人資料,而不是其他人。如果用戶通過身份驗證,則在Django視圖中自動HTTPRedirect?

此前,他們可以參觀www.websitename.com/user/admin 以及www.websitename.com/user/test,它會在登錄用戶的每一次調出數據的配置文件。

的URL訪問是www.websitename.com/user/usernameofcurrentuser

個人資料頁面視圖

def profile_page(request, username): 
    context = RequestContext(request) 
    if request.user == username: 
     if request.user.is_authenticated(): 
      user = User.objects.get(username=username) 
      taskitems = request.user.taskitem_set.all() 
      return render_to_response('profile.html', {}, context) 
     else: 
      return render_to_response('login.html', {}, context) 
    else: 
     return render_to_response('login.html', {}, context) 

然而,即使用戶登錄,這是他們重定向到登錄頁面。我知道用戶已登錄,因爲它在登錄頁面上顯示了他們的名字,但並未將他們重定向到與用戶名關聯的配置文件。

回答

1

你可以試試這個:

def profile_page(request, username): 
    if request.user.is_authenticated(): 
     if request.user.username == username: 
      # removed user since already in request.user and available in template as 'user' 
      # removed taskitems since directly available in template as 'user.taskitem_set.all' 
      return render(request, 'profile.html') 
     else: 
      return HttpResponseRedirect(reverse('profile_page', args=(request.user.username,))) 
    else: 
     return render(request, 'login.html') 
+0

對我的男人,它的工作。 – ryan

0

取出username參數,因爲每個用戶只能查看自己的個人資料。您也可以使用login_required裝飾刪除多餘的條件:

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 

@login_required 
def profile_page(request): 
    return render(request, 'profile.html') 

務必將您的settings.py這樣未經授權的用戶LOGIN_URL重定向到正確的位置。

相關問題