Domanda

Ho una visione che ha il decoratore @login_required e su tirando la pagina, se non si è connessi in esso ti invia al form di login con il corretto? Successivo = / url / voi / provato / a / vedere

Il mio problema è come passo lungo quella? Successivo valore alle forme successive e-mail di attivazione in modo che quando l'utente completa il processo di attivazione vengono reindirizzati alla vista originariamente cercato di raggiungere.

Il mio Python'foo e Django'foo è debole, quindi si prega di tenere la risposta a qualcosa di 5 anni potrebbe seguire;)

Grazie a tutti in anticipo.

È stato utile?

Soluzione

E 'facile, basta salvare l'URL e scrivere il proprio backend sovrascrivendo 2 metodi.

Account / models.py

class UserNext(models.Model):
    user = models.OneToOneField(User)
    url = models.CharField(max_length=255, blank=True, null=True)

conti / 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)

utente questo ^ backend come backend di registrazione in contabilità / 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'),

Il lavoro dovrebbe, non ha testarlo, scritto al volo. Ovviamente sarà necessario aggiungere alcune importazioni.

Altri suggerimenti

Costruito nel vista gestisce questo per impostazione predefinita. Assicurarsi di avere questo pezzo di codice:. <input type="hidden" name="next" value="{{ next }}" /> nel modello della pagina di login

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top