2013-05-29 19 views
8

Sto lavorando a un'applicazione Django che avrà due tipi di utenti: amministratori e utenti. Entrambi sono gruppi nel mio progetto e, a seconda del gruppo di appartenenza, mi piacerebbe reindirizzarli in pagine separate. In questo momento ho questo nel mio settings.pyDjango - Reindirizzamento accesso condizionato

LOGIN_REDIRECT_URL = 'admin_list' 

Questo reindirizza tutti gli utenti che accedono a 'admin_list', ma la vista è accessibile solo ai membri del gruppo di amministratori - altrimenti restituisce a 403. Come per la vista di login stessa, sto solo usando quello fornito da Django. Ho aggiunto questo al mio file urls.py principale per utilizzare questi punti di vista:

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

Come posso fare questo in modo che solo i membri del gruppo amministratori sono reindirizzare a questo punto di vista, e tutti gli altri viene reindirizzato a un vista diversa?

+0

Stai usando la tua vista di accesso o riutilizzando quella generica di Django? Se la tua vista, poi ci mostra la vista. –

+1

Sto utilizzando la vista di accesso generica di Django, semplicemente usando questo nel mio urls.py url principale (r '^ accounts /', include ('django.contrib.auth.urls')), –

+2

Aggiorna la domanda con queste informazioni per favore . Nessuno può aiutarti se non fornisci tutte le informazioni necessarie per eseguirne il debug. –

risposta

16

Creare una vista separata che reindirizzi l'utente in base al fatto che si trovi nel gruppo admin.

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

aggiungere la vista al vostro urls.py,

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

poi lo usano per l'impostazione LOGIN_REDIRECT_URL.

LOGIN_REDIRECT_URL = 'login_success' 
+2

Ho aggiunto quanto segue a myapp/urls.py e ha funzionato perfettamente! url (r'login_success/$ ', views.login_success, name =' login_success '), –

3

Io uso una visione intermedia per ottenere la stessa cosa:

LOGIN_REDIRECT_URL = "/wherenext/" 

poi nella mia urls.py:

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

poi nella vista:

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