Ich versuche, eine einfache Website mit Anmeldefunktionen zu erstellen, die der hier auf SO sehr ähnlich sind. Der Benutzer sollte in der Lage sein, die Website als anonymer Benutzer zu durchsuchen, und auf jeder Seite wird ein Anmeldelink angezeigt. Wenn Sie auf den Anmeldelink klicken, wird der Benutzer zum Anmeldeformular weitergeleitet. Nach einer erfolgreichen Anmeldung sollte der Benutzer zu der Seite zurückkehren, von der aus er zuerst auf den Anmeldelink geklickt hat. Ich vermute, dass ich die URL der aktuellen Seite irgendwie an die Ansicht übergeben muss, die das Anmeldeformular verarbeitet, aber ich kann es nicht wirklich zum Laufen bringen.
EDIT: Ich habe es herausgefunden. Ich habe eine Verknüpfung zum Anmeldeformular hergestellt, indem ich die aktuelle Seite als GET-Parameter übergeben und dann 'next' verwendet habe, um zu dieser Seite umzuleiten. Vielen Dank!
EDIT 2: Meine Erklärung schien nicht klar zu sein. Wie hier angefordert, ist mein Code: Nehmen wir an, wir befinden uns auf einer Seite foo.html und sind nicht angemeldet. Jetzt möchten wir einen Link auf foo.html haben, der verlinkt zu login.html. Dort können wir uns anmelden und werden dann zurück zu foo.html umgeleitet. Der Link auf foo.html sieht folgendermaßen aus:
<a href='/login/?next={{ request.path }}'>Login</a>
Jetzt habe ich eine benutzerdefinierte Anmeldeansicht geschrieben, die ungefähr so aussieht:
def login_view(request):
redirect_to = request.REQUEST.get('next', '')
if request.method=='POST':
#create login form...
if valid login credentials have been entered:
return HttpResponseRedirect(redirect_to)
#...
return render_to_response('login.html', locals())
Und die wichtige Zeile in login.html:
<form method="post" action="./?next={{ redirect_to }}">
Also ja, das ist so ziemlich alles, hoffe das macht es klar.
Antworten:
Sie müssen hierfür keine zusätzliche Ansicht erstellen, die Funktionalität ist bereits integriert.
Zuerst muss jede Seite mit einem Anmeldelink den aktuellen Pfad kennen. Am einfachsten ist es, den Anforderungskontext-Präprozessor zu settings.py hinzuzufügen (die 4 ersten sind Standard). Dann ist das Anforderungsobjekt in jeder Anforderung verfügbar:
settings.py:
Fügen Sie dann in der Vorlage den gewünschten Login-Link hinzu:
base.html:
Dadurch wird der Anmeldeseite ein GET-Argument hinzugefügt, das auf die aktuelle Seite verweist.
Die Anmeldevorlage kann dann so einfach sein:
Registrierung / Login.html:
quelle
request.path
null ist.{% firstof request.path '/' %}
Wenn der Anforderungspfad aus irgendeinem Grund nicht verfügbar ist, wird der Benutzer auf die Startseite gesendet.<a href="{% url auth_login %}?next={% firstof request.path '/' %}">Login</a>
stattdessen tun .next
wäre so etwas wie/accounts/logout/
und nachdem sich der Benutzer angemeldet hat, wird er sofort wieder abgemeldet lol und die Schleife wird fortgesetzt.Dies ist möglicherweise keine "Best Practice", aber ich habe dies bereits erfolgreich angewendet:
quelle
Um vollständige URLs mit Parametern / Werten zu unterstützen, benötigen Sie:
statt nur:
quelle
Die integrierte Authentifizierung von Django funktioniert wie gewünscht.
Ihre Anmeldeseiten enthalten eine
next
Abfragezeichenfolge, zu der nach der Anmeldung zurückgekehrt wird.Schauen Sie sich http://docs.djangoproject.com/de/dev/topics/auth/#django.contrib.auth.decorators.login_required an
quelle
Ich habe eine Verknüpfung zum Anmeldeformular hergestellt, indem ich die aktuelle Seite als GET-Parameter übergeben und dann 'next' verwendet habe, um zu dieser Seite umzuleiten. Vielen Dank!
quelle
Ich bin auf das gleiche Problem gestoßen. Mit dieser Lösung kann ich weiterhin die generische Anmeldeansicht verwenden:
quelle
Wenn Sie in
registration/login.html
(imtemplates
Ordner verschachtelt ) die folgende Zeile einfügen, wird die Seite wie die ursprüngliche Administrator-Anmeldeseite von Django gerendert:Hinweis: Die Datei sollte nur die obigen Zeilen enthalten.
quelle
Siehe django docs für views.login () . Sie geben einen 'nächsten' Wert (als verstecktes Feld) im Eingabeformular an, zu dem nach einer erfolgreichen Anmeldung umgeleitet werden soll.
quelle
Sie können dies auch tun
quelle