propaga? prossimo = in django-registrazione
-
02-10-2019 - |
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.
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