que se propaga? = próxima en django-registro
-
02-10-2019 - |
Pregunta
Tengo una visión que tiene el decorador @login_required y al tirar hacia arriba de la página, si no está en el sistema se le envía a la forma de la conexión con el correcto? Siguiente = / url / usted / tratado / a / ves
Mi problema es cómo me pase lo largo de esa? Siguiente valor a las formas posteriores y correo electrónico de activación de modo que cuando el usuario completa el proceso de activación se les redirige a la vista que inicialmente trataron de llegar.
Mi Python'foo y Django'foo es débil, así que por favor mantenga la respuesta a algo a 5 años podía seguir;)
Gracias a todos en avanzada.
Solución
Es muy fácil, sólo tienes que guardar la URL y escribir su propio backend anulando 2 métodos.
cuentas / models.py
class UserNext(models.Model):
user = models.OneToOneField(User)
url = models.CharField(max_length=255, blank=True, null=True)
cuentas / 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)
usuario esta ^ back-end como su base de registro de cuentas / 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'),
En caso de trabajar, no probó que, por escrito sobre la marcha. Obviamente, se necesita la adición de algunas importaciones.
Otros consejos
Construido en vista maneja esto por defecto. Asegúrate de que tienes esta pieza de código:. <input type="hidden" name="next" value="{{ next }}" />
en la plantilla de la página de inicio de sesión