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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top