11

Ich benutze Django-Allauth für eines meiner Projekte. Ich möchte den Anmelde-/Anmeldeprozess über Ajax implementieren. Ich hätte gerne eine benutzerdefinierte Anmeldeform. Ich ging durch ihr Anmeldeformular und Anmeldeformular. Klingt so, als könnte ich benutzerdefinierte Ansichten für jede Aktion schreiben und sie der URL-Konfiguration zuordnen. Ich bin nicht sicher, was der beste Weg ist, dies zu tun.Umsetzung von Ajax Anfragen/Antwort mit Django-Allauth

Vielen Dank für jede Hilfe oder Beratung zu diesem Thema.

Antwort

9

Es hängt ein bisschen davon ab, was Sie mit Ajax meinen. Wenn Sie nur ein Popup-ähnliches Anmelde-/Anmeldefenster auf jeder Seite haben möchten, können Sie das Formular einfach zu Ihrer Basisvorlage hinzufügen und es dynamisch mit Javascript in einem Popup-Feld anzeigen. Wenn Sie die Form Aktion URL auf die ursprünglichen allauth URLs halten, dann wird dies bereits das Gefühl einer Ajax-Anmeldung geben. Sie können auch Dinge zwicken, indem Sie $.ajax oder $.post verwenden, um die ursprünglichen Ansichten allauth anzuzeigen.

Etwas wie das oben genannte ist getan auf http://officecheese.com/ - dies ist eine allauth basierte Website, obwohl ich nicht damit verbunden bin.

Wenn Sie mit Ajax meinen, dass alle authentifizierungsbezogenen Ansichten über Ajax angezeigt werden sollen, ohne dass ein neues Dokument neu geladen wird, dann habe ich Angst, dass Sie ein wenig Pech haben. Dies ist einfach problematisch für Szenarios, bei denen E-Mail-Verifizierung oder OAuth-Handshakes ausgeführt werden, da Sie hier normalerweise zu einer neuen URL aus Ihrem Postfach navigieren oder zu Twitter weiterleiten usw.

+1

Hallo @pennersr, großartig, um Ihre Antwort zu haben. Ich würde gerne ein Formular in Dropdown implementieren, das dem ähnlich ist, was officecheese.com macht. aber wenn es einen Fehler gibt, sagen wir "ungültiger Benutzername oder Passwort" oder "Benutzername existiert bereits". Ich möchte diesen Fehler direkt vor dem Navigieren bekommen. Also, was mein Plan ist, senden Sie das Formular über '$ .post' und json Antwort für Login und Anmeldung. Vielen Dank, dass Sie mir dabei geholfen haben. – san

+1

Sie können die Antwort auf Ihren '$ .post/ajax'-Aufruf überprüfen, das Formular html (das die Überprüfungsfehler enthält) extrahieren und das ursprüngliche Formular ersetzen. Etwas wie: '$ (" ... oldForm ... ")). ReplaceWith ($ (ajaxresponse) .find (" form "))'. Wenn Sie feststellen, dass die Anmeldung erfolgreich war, kann die URL-Weiterleitung etwas unordentlich werden. Sie müssten feststellen, dass Sie in der Login-Weiterleitungs-URL landen. Das Überschreiben der Ansichten zum Zurückgeben strukturierter JSON-Daten ist jedoch sauberer. Aber warum sollte man sich die Mühe machen, dies zu ajaxifizieren - Websites wie Twitter tun dies auch nicht. – pennersr

+0

@pennersrs gibt es neben der hardcodierung der ID in die Basisvorlagen oder der Verwendung von klassenbasierten Ansichten auch die Möglichkeit, das Formular in alle meine funktionsbasierten Ansichten einzubinden, ohne dieses zu jeder Ansicht hinzufügen zu müssen? – wasabigeek