2016-03-29 5 views
1

Ich erstelle eine App, die mit einer Zielseite beginnt, auf der sich Benutzer anmelden oder registrieren können. Ich habe zwei verschiedene Arten von Benutzern, die nach erfolgreicher Anmeldung zu zwei verschiedenen Dashboard-Seiten geleitet werden (ich weiß, welcher Benutzer sich basierend auf seinen Anmeldeinformationen anmeldet).Django view Verkettung/Weiterleitung von bewährten Methoden

Meine Frage ist über den besten Weg, diese Ansicht weise zu behandeln. Meine Login-Ansicht hat die Logik, um zu ermitteln, welche Art von Benutzer ich erhalte, und dann die Vorlage für das Dashboard dieses Benutzers richtig darzustellen. Ich habe jedoch auch eine separate Ansicht für jede Art von Dashboard, die dieselben Vorlagen auf die gleiche Weise wie in der Login-Ansicht darstellt - dies ist, wenn Benutzer auf die Schaltfläche "Home" klicken oder was Sie haben. Es scheint albern, eine Logik wie diese zu wiederholen (plus jetzt gibt es zwei URLs für jedes Dashboard - 'login /' und 'dashboard_x /'), also bin ich neugierig auf die beste Möglichkeit, meine Login-Ansicht "umleiten" zu lassen richtige Dashboard-Ansicht basierend auf den empfangenen Anmeldedaten. Im Idealfall würde es nur die Art des Benutzers überprüfen und dann die Anfrage an die richtige Dashboard-Ansicht weiterleiten, ohne sie zu ändern.

Antwort

1

Sie könnten einfach eine bedingte Django-Umleitung aus der Shortcuts-Bibliothek verwenden? Es gibt Dokumente here dafür.

Etwas wie:

from django.shortcuts import redirect 

def my_view(request): 
    if something: 
     return redirect('something-view') 
    elif something_else: 
     return redirect('something-else-view') 
    else: 
     # do something else 

Natürlich würde man dies auf die Art der Ansicht anpassen müssen Sie verwenden (Class Based/Funktion basiert).

Sie können auch den Schalter mit einem Abfrageparameter ausführen, wenn Sie die gleichen URLs und Ansichten verwenden möchten:

def my_view(request): 
    if something: 
     return redirect('something-view', type='thing') 
    elif something_else: 
     return redirect('something-view', type='else') 
    else: 
     # do something else 

Dann Test für Typ in Ihrem etwas Blick. Es ist natürlich nicht sehr sicher (der Benutzer könnte den Typparameter ändern), also sollten Sie überprüfen, welche Art von Benutzer sie wieder in der Something-View waren, um sicher zu gehen, dass sie nicht die Version sehen wollten, die sie nicht sollten. t.

Und schließlich ist Option drei, sie beide auf das gleiche Dashboard umzuleiten, und sie verlassen sich nur auf eine Überprüfung des Typs des Benutzers in der Dashboard-Ansicht, um festzustellen, welche Inhalte ihnen angezeigt werden. Dies ist die sicherste Option, da die Logik auf dem Server und außerhalb der Kontrolle der Benutzer bleibt :). Dies ist auch ein sehr gebräuchliches Idiom für Ansichten, beispielsweise verhalten sich viele Ansichten unterschiedlich, wenn ein aktueller Benutzer vorhanden ist oder nicht.

Verwandte Themen