/ / Verwenden eines Formularassistenten als Anmeldeformular django allauth - django, django-forms, django-allauth

Verwenden eines Formularassistenten als Anmeldeformular django allauth - django, django-forms, django-allauth

Ich versuche, einen Formularassistenten bei der Registrierung / Anmeldung zu implementieren. ich benutze django-allauth zur Authentifizierung und basierend auf den Dokumenten und einer vorherigen Frage So passen Sie das Benutzerprofil an, wenn Sie django-allauth verwenden Es beschreibt, wie dem Zeichen zusätzliche Felder hinzugefügt werdenup Form. Ich sehe nicht wirklich, wie ich das Standardformular überschreiben kann, um einen Formularassistenten zu verwenden. Eine Option, die ich in Erwägung zog, ist das Hinzufügen aller zusätzlichen Felder zum Anmeldeformular und dann das Anzeigen des Abschnitts der Formulare mit AJAX, aber ich bin nicht sicher, wie zu implementieren Validierung in den verschiedenen Abschnitten: Jede Anleitung oder Hilfe zur Implementierung des Registrierungsschritts als Magier würde sehr geschätzt werden.

Antworten:

1 für die Antwort № 1

Ich habe das kürzlich getan durch:

views.py

from allauth.account.forms import SignupForm
from allauth.account.utils import complete_signup

SIGNUP_FORMS = [("signup", SignupForm),
("profile", forms.UserProfileForm)]

TEMPLATES = {"signup": "trips/forms/wizard_form.html",
"profile": "trips/forms/wizard_form.html"}

class SignupWizard(SessionWizardView):
def get_template_names(self):
return [TEMPLATES[self.steps.current]]

def done(self, form_list, **kwargs):
for form in form_list:
if isinstance(form, SignupForm):
user = form.save(self.request)
complete_signup(self.request, user, settings.ACCOUNT_EMAIL_VERIFICATION, settings.LOGIN_REDIRECT_URL)
elif isinstance(form, forms.UserProfileForm):
userprofile = form.save(commit=False)
user = self.request.user
userprofile.user = user
userprofile.save()
return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)

Sie können beliebig viele Formulare hinzufügen. In meinem Fall ist die UserProfileForm eine ModelForm, die ein neues UserProfile-Objekt mit einer Eins-zu-Eins-Beziehung zum Benutzer erstellt. Beide Objekte werden erst gespeichert, nachdem beide Formulare erfolgreich übergeben wurden. Die Funktion complete_signup stammt aus allen Richtungen und führt eine Bereinigung durch und protokolliert den Benutzer dann auf der Site.


0 für die Antwort № 2

Am Ende habe ich den Wizard von der Client-Seite mit AngularJS implementiert Django-eckiges Paket und diese Bibliothek. Nach dem Graben durch die allauth Anmelde-Code, ich habe herausgefunden, dass es bereits implementiert ist AjaxCapableProcessFormViewMixin

Implementieren eines Assistenten unter Verwendung von clientseitigem Code für den Anmeldeprozess bei der Verwendung django-allauth Dies ist wahrscheinlich der beste Weg, da Sie die erfolgreiche Umleitung verzögern können, bis alle Formulare im Assistenten gefüllt sind, und verhindert, dass lange Anmeldeformulare in kleinere Formulare aufgeteilt werden.