Over-Riding Django-Allauth Login / Registrierung URLs mit benutzerdefinierten URL / Seiten

Ich habe django-allauth für die Anmeldung über Facebook, Twitter und Google konfiguriert.

Allerdings akzeptiert django-allauth die Anmeldeanforderung nur bei /accounts/login/ , /accounts/signup/ mich nur bei /accounts/signup/ etc. an. Ich habe ein modales Formular für Login und Registrierung auf meiner Homepage und ich möchte nur das verwenden.

Bildbeschreibung hier eingeben

Wie verwende ich das django-allauth-System, um das Login (sowohl soziale als auch benutzerdefinierte) / Registrierung usw. aus dem modalen Formular auf meiner Homepage zuzulassen? Ich bin auf der Suche nach Mechanismus, um django-allauths URLs zu überschreiben und sie mit meinen Seiten / URLs zu ersetzen.

Der Code ist hier

Das modale Formular HTML ist hier .

Diese Frage ist vielleicht ähnlich. Allerdings ist die Antwort in der Frage nicht zu verständlich.

Nach einigen Antworten habe ich diese Änderungen vorgenommen:

 #views.py def logreg(request): context = { 'login_form': MyLoginForm(), 'signup_form': MySignupForm() } return render(request, 'login.html', context) #In URL Patterns of urls.py url(r'^login/', logreg, name='login'), In Index ( from where call to the modal is to be made): <p>Welcome visitor <a href="#" data-modal-url="{% url 'login' %}">Login</a> or <a href="#">Register</a></p> 

All diese Arbeit führte zu diesem Chaos:

  Internal Server Error: /login/ Traceback (most recent call last): ... django.core.urlresolvers.NoReverseMatch: Reverse for 'ecomweb.home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] During handling of the above exception, another exception occurred: ... django.core.urlresolvers.NoReverseMatch: Reverse for 'home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Ich bin verrückt nach dem, was passiert.

4 Solutions collect form web for “Over-Riding Django-Allauth Login / Registrierung URLs mit benutzerdefinierten URL / Seiten”

Nun, es ist eine ziemlich einfache Lösung.

In urls.py tun dies:

 from allauth.account.views import LoginView, SignupView urlpatterns = [ ... url(r'^customurl/login/', LoginView.as_view(), name="custom_login" ), url(r'^customurl/signup/', SignupView.as_view(), name="custom_singup" ), ... ] 

Ich denke, du möchtest die Formen von Django-Allauth in deiner Hausansicht anrufen

In views.py :

 from django.allauth.account.forms import LoginForm, SignupForm def home(request): context = { 'login_form': LoginForm(), 'signup_form': SignupForm(), } return render(request, "myapp/home.html", context) 

In deiner Vorlage (zB templates/myapp/home.html ):

 <form action="{% url 'account_login' %}?next={% url 'home' %}" method="POST"> {% csrf_token %} {{login_form}} </form> <form action="{% url 'account_signup' %}?next={% url 'home' %}" method="POST"> {% csrf_token %} {{login_form}} </form> 

Dann ist die letzte Sache, dass du Django-allauths blank Vorlagen standardmäßig haben wirst, aber du kannst sie überschreiben, indem du eine base.html Vorlage in einem Verzeichnis namens account dein Application Template Verzeichnis (zB myproject/templates/account/base.html Ich empfehle, von der gleichen Vorlage zu verlängern, die du für deine Heimvorlage einsetzest. Vergewissere dich, dass diese account/base Basisvorlage den folgenden Block hat, der von django-allauth ausgefüllt wird:

 {% block content %} {% endblock %} 

Die Allauth-Vorlagen auf diese Weise zu überschreiben (was du auf einer per-Endpunkt-Basis tun möchtest, wenn du willst) wird nur funktionieren, wenn du deine eigene App vor allauth in deiner settings.py allauth

 INSTALLED_APPS = [ 'django.contrib.admin', ... 'myapp', 'allauth', 'allauth.account', ... 

Wenn du versuchst, die URL in urls.py zu überschreiben, hast du die Override oberhalb oder unterhalb der "url (r '^ accounts /', include ('allauth.urls'))? Als ich versuchte, Allauth das erste Mal zu überschreiben, legte ich meinen Code unter diese Zeile, was nicht funktioniert – über diese Zeile gearbeitet.

Für die Verwendung von allauths Anmelde- oder Anmeldefunktionalität müssen Sie die damit verbundenen URLs nicht überschreiben.

Setzen Sie einfach Ihr Formular an die URLs, die mit dem Allauth verbunden sind

 <form action="/accounts/login/?next{{request.path}}" method="POST"> {% csrf_token %} <!-- Your form elements here --> </form> <form action="/accounts/signup/?next{{request.path}}" method="POST"> {% csrf_token %} <!-- Your form elements here --> </form> 

Es liegt an dir, den nächsten {{request.path}} zu verwenden , wenn du willst, dass dein Benutzer auf der gleichen Seite bleibt, von wo er sich eingeloggt hat.

Aktualisierte Antwort:

Zuerst nicht speichern Vorlagen in den statischen Ordner, seine nicht eine gute Praxis.

Wie ich bereits darauf hingewiesen habe, dass Sie für die Verwendung von allauths views Funktionalität nicht unbedingt seine url und views überschreiben müssen (ausgenommen aus bestimmten Gründen).

  1. Innerhalb deines Vorlagenordners erstellen Sie einen neuen Ordner mit login.html Datei.
  2. Füge deinen HTML-Login- code in dieser login.html Datei ein.

  3. Löschen Sie Ihre Methode benutzerdefinierte Login-Methode logreg und seine verwandten url und imports .

  4. Ändern Sie alle Referenzen, die auf Ihre benutzerdefinierte Login-Methode logreg mit account_login (allauth's login name).

  5. In deiner base.html – ersetzen Sie {% static 'login.html'%} zu {% url 'account_login'%}.

Und du bist bereit zu gehen.

Aber du musst das html für den Fall behandeln, wenn ein Benutzer versucht zu besuchen /accounts/login/ Seite.

Darüber hinaus können Sie immer den Fallback-Ansatz verwenden, um Ihr modales Login-Formular über ajax-Anfrage an Konten / Login / und Handle Erfolg () und Fehler ().

  • Debugging django-allauth Social Network Login Misserfolg
  • Django allauth Beispiel [Errno 61] Verbindung abgelehnt
  • Django-Allauth lädt falsche base.html Vorlage
  • Django-allauth Anmeldung, Login und Social Connect in eine Seite
  • Python ist die beste Programmiersprache der Welt.