2013-05-29 7 views
8

Pracuję nad aplikacją Django, która będzie miała dwa typy użytkowników: administratorów i użytkowników. Obie są grupami w moim projekcie, a w zależności od tego, do której grupy należy indywidualne logowanie, chciałbym przekierować je na osobne strony. Teraz mam to w moim settings.pyDjango - logowanie warunkowe Przekierowanie

LOGIN_REDIRECT_URL = 'admin_list' 

To przekierowania wszystkich użytkowników, którzy zapisali się do „admin_list”, ale widok jest dostępny tylko dla członków grupy Administratorzy - w przeciwnym razie zwraca 403. As dla samego widoku logowania używam tylko jednego z Django. Dodałem to do mojego głównego pliku urls.py wykorzystać te widoki:

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

Jak mogę zrobić to tak, że tylko członkowie grupy Administratorzy są przekierować do tego poglądu, a wszyscy inni są przekierowywane do inny widok?

+0

Czy używasz własnego widoku logowania lub ponownego używania ogólnego Django? Jeśli masz własny widok, pokaż nam widok. –

+1

Używam ogólnego widoku logowania Django, po prostu używając tego w moim głównym urls.py url (r '^ accounts /', include ('django.contrib.auth.urls')), –

+2

Zaktualizuj pytanie z tymi informacjami proszę . Nikt nie może ci pomóc, jeśli nie podasz wszystkich informacji potrzebnych do debugowania. –

Odpowiedz

16

Utwórz osobny widok przekierowujący użytkownika na podstawie tego, czy jest on w grupie administracyjnej.

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

Dodaj pogląd na swojej urls.py,

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

następnie użyć go do ustawienia LOGIN_REDIRECT_URL.

LOGIN_REDIRECT_URL = 'login_success' 
+2

Dodałem poniższe do myapp/urls.py i działało idealnie! url (r'login_success/$ ', views.login_success, name =' login_success '), –

3

używam pogląd pośredni, aby osiągnąć to samo:

LOGIN_REDIRECT_URL = "/wherenext/" 

następnie w moim urls.py:

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

następnie w widoku:

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