ausbreitende? next = in django-Registrierung
-
02-10-2019 - |
Frage
Ich habe eine Ansicht, die die @login_required Dekorateur hat und auf die Seite nach oben ziehen, wenn Sie nicht angemeldet sind es zum Anmeldeformular sendet mit dem richtigen? Next = / url / Du / versucht / to / sehen
Mein Problem ist, wie ich entlang dem? Nächster Wert auf die nachfolgenden Formen und Aktivierungs E-Mail übergebe, so dass, wenn der Benutzer den Aktivierungsprozess abgeschlossen ist sie die Ansicht umgeleitet werden, ursprünglich versucht, sie zu erhalten.
Meine Python'foo und Django'foo ist schwach, so halten Sie die Antwort auf etwas, das ein 5 Jahre altes folgen konnte;)
Danke alle in vorgerückt.
Lösung
Es ist einfach, nur speichern Sie die URL und schreiben Sie Ihre eigenen Backend-Überfahren von 2 Methoden.
Konten / models.py
class UserNext(models.Model):
user = models.OneToOneField(User)
url = models.CharField(max_length=255, blank=True, null=True)
Konten / nextbackend.py:
from registration.backends.default import DefaultBackend
from django.core.urlresolvers import resolve
from accounts.models import UserNext
class NextBackend(DefaultBackend):
def register(self, request, **kwargs):
username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email,
password, site)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
next, created = UserNext.objects.get_or_create(user=new_user)
next.url = request.GET.get('next',None) # or POST, don't know how you want to pass it
next.save()
return new_user
def post_activation_redirect(self, request, user):
next = UserNext.objects.get(user=user)
view, args, kwargs = resolve(next.url)
return (view, args, kwargs)
Benutzer dieses ^ Backend als Ihre Registrierung Backend in Konten / views.py:
def custom_register(request):
return register(request, backend='accounts.nextbackend.NextBackend',)
urls.py:
url(r'^accounts/register/$', 'accounts.views.custom_register', name='registration_register'),
Should Arbeit, hat es bisher nicht testen, on the fly geschrieben. Offensichtlich müssen einige Importe hinzufügen.
Andere Tipps
Einbau in Sicht behandelt dies standardmäßig. Vergewissern Sie sich, dieses Stück Code. <input type="hidden" name="next" value="{{ next }}" />
in der Vorlage der Anmeldeseite