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 № 1Ich 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.