2013-05-29 87 views
8

我正在研究一個Django應用程序,該應用程序將有兩種類型的用戶:管理員和用戶。兩者都是我的項目中的組,並根據個人日誌所屬的組,我想將它們重定向到單獨的頁面。現在我有這個在我的settings.pyDjango - 條件登錄重定向

LOGIN_REDIRECT_URL = 'admin_list' 

這重定向誰登錄「admin_list」的所有用戶,但視圖僅僅是到管理員組的成員訪問 - 否則返回403。對於登錄視圖本身,我只使用Django提供的一個。我把這個添加到我的主urls.py文件中使用這些視圖:

url(r'^accounts/', include('django.contrib.auth.urls')), 

我怎樣才能讓這使得只有管理員組的成員都重定向到這個觀點,和大家一樣會被重定向到一個不同的看法?

+0

你使用自己的登錄視圖還是重用Django的通用視圖?如果你自己的看法,然後向我們展示的觀點。 –

+1

我正在使用Django的通用登錄視圖,只是在我的主urls.py url(r'^ accounts /',include('django.contrib.auth.urls'))中使用這個, –

+2

請用該信息更新問題。如果您沒有提供調試所需的全部信息,沒有人可以幫助您。 –

回答

16

根據用戶是否在管理員組中,創建一個單獨的視圖來重定向用戶。

from django.shortcuts import redirect 

def login_success(request): 
    """ 
    Redirects users based on whether they are in the admins group 
    """ 
    if request.user.groups.filter(name="admins").exists(): 
     # user is an admin 
     return redirect("admin_list") 
    else: 
     return redirect("other_view") 

添加視圖到您的urls.py

url(r'login_success/$', views.login_success, name='login_success') 

然後用它爲您LOGIN_REDIRECT_URL設置。

LOGIN_REDIRECT_URL = 'login_success' 
+2

我將以下內容添加到myapp/urls.py並且它完美運行! url(r'login_success/$',views.login_success,name ='login_success'), –

3

我使用一箇中間視圖來完成同樣的事情:

LOGIN_REDIRECT_URL = "/wherenext/" 

然後在我的urls.py:

(r'^wherenext/$', views.where_next), 

然後在視圖:

@login_required 
def wherenext(request): 
    """Simple redirector to figure out where the user goes next.""" 
    if request.user.is_staff: 
     return HttpResponseRedirect(reverse('admin-home')) 
    else: 
     return HttpResponseRedirect(reverse('user-home'))