2016-12-13 3 views
0

In meinem Projekt habe ich 2 Modelle mit dem Namen Studenten und Lehrer. Diese beiden Modelle sind ein OneToOne-Feld zu User. Ich habe 3 Anwendungen: Hause (Index-Seite, faq, über ...), Lehrer (Schnittstelle für Lehrer, ihre Kurse verwalten, bearbeiten profil ...) und Studenten (Schnittstelle für Studenten, profil. ..)Django: Authentifizierte verschiedene Benutzermodelle

Ich habe ein Login-Formular (in der Anwendung zu Hause), und ich möchte es für einloggen Lehrer und Schüler verwenden, und umleiten, um die richtige Anwendung nach der Authentifizierung. Was ist der beste Weg dafür? Ich denke, um zwei Gruppen (Lehrer und Schüler) zu erstellen und der richtigen Gruppe nach dem Registrierungsformular zuzuweisen, und in Log-in Form, einfach die Gruppe überprüfen?

PS: Student kann ein Konto erstellen, sondern auch für Lehrer, unser Team schafft Konten, so dass wir nicht über ein Anmeldeformular für Lehrer

Antwort

1

Wenn Bezug auf Benutzertabelle OneToOne ist, können Sie es von Benutzern zugreifen können .student oder user.teacher, so dass Sie es ...

def login_view(request): 
    if form.is_valid(): 
     # get user from form 
     _user = form.get_user() 
     user = authenticate(form.cleaned_data['username'], form.cleaned_data['password']) 
     login(request, user) 
     if hasattr(user, 'student'): 
      # You'll return to student app 
      return redirect('studen:home') 
     # else 
     return redirect('teacher:home') 

EDIT tun würde

decorators.py

... 
from django.contrib.auth.decorators import user_passes_test 
def group_required(*args): 
    if args: 
     def decorator(user): 
      if user.is_staff or user.is_superuser: 
       return True 
      return user.is_authenticated() and user.groups.filter(name__in=args).exists() 
    else: 
     decorator = lambda x: x.is_authenticated() 

    return user_passes_test(decorator) 
... 

Und es verwendet ...

... 
@group_required('student') 
def home_student(request): 
    # some code 

@group_required('teacher', 'student'): 
def common_view_for_all(request): 
    # some code 
... 
+0

Danke, aber wenn ich den Zugang von Lehrern Ansichten für Studenten schützen will, ich denke, es ist ein bester Weg, Gruppen zu erstellen und einen Dekorateur nicht zu benutzen? – Alexandre

+0

ja, Dekorateure in Gruppen zusammengefasst, ich werde die Antwort aktualisieren, um zu erklären, wie ... –

+0

thx, mit '@ permission_required' – Alexandre

Verwandte Themen