Si nos fijamos en la vista responsable de la activación de una cuenta por correo electrónico (registration.views.activate) verás que acepta un parámetro success_url que es "El nombre de un patrón de URL para redirigir a la activación exitosa. "
Así que simplemente tiene que sobrescribir la url que llama a esa vista y proporcionar la página a la que desea redirigir.
Así que en su propia urls.py:
from registration.views import activate
urlpatterns = patterns('',
url(r'^activate/(?P<activation_key>\w+)/$',
activate,
{'backend': 'registration.backends.default.DefaultBackend'},
name='registration_activate',
# You could use reverse() here instead of a URL to be DRY'er
success_url = "http://..."
),
Como alternativa puede concluir django-registros Activar vista en su propio punto de vista y aceptar un parámetro GET para redirigir a:
from registration.view import activate
def custom_activate(request, backend,
template_name='registration/activate.html',
success_url=None, extra_context=None, **kwargs):
success_url = request.GET.get('next', None)
return activate(request, template_name=template_name, success_url=success_url, extra_context=None, **kwargs)
Ahora, en su plantilla registration/activation_email.html puede agregar la ubicación de redirección al enlace:
{% url 'registration.view.activate' activation_key as a_url %}
Thanks! ....
{% autoescape off %}
<a href="http://{{ site.domain }}{{ a_url }}?next='http://somepage_or_url'">
http://{{ site.domain }}{{ url_registration_activate }}/
</a>
{% endautoescape %}
Thanks!
EDITAR
Ok, por lo que los anteriores se ocupa de redirecciones cifrados duros. Supongo que este es el flujo que desee:
- usuario intenta acceder a una página
- usuario se le redirecciona a una página de inicio de sesión/registro
- usuario se registra en esa página y se envía un correo electrónico
- usuario activa el correo electrónico y se le redirecciona a la página original se trató de ver
Esto es más difícil, ya que la página que estaban tratando de ver en el paso uno tiene que pasar todo el camino al paso cuatro, y como lo sabemos, HTTP es apátrida.
La primera sugerencia que me viene a la mente es guardar el redireccionamiento en una variable de sesión cuando se registra y luego recuperarlo cuando se activa.Para ello podemos sobrescribir django-registros default backend (que es sólo una clase con métodos que describen la funcionalidad del proceso de registro y se llaman desde el punto de vista), específicamente los métodos de registro y post_activation_redirect:
custom_backend.py
from registration.backends.default import DefaultBackend
class RedirectBackend(DefaultBackend):
def register(self, request, **kwargs):
request.session['redirect'] = request.GET.get("next",None)
super(RedirectBackend, self).register(request, **kwargs)
def post_activation_redirect(self, request, user):
return(request.session['redirect'],(), {})
y para asegurarse de django-registro realmente utiliza este componente de fondo, que proporcionan a los puntos de vista a través de nuestra urls.py:
url(r'^activate/(?P<activation_key>\w+)/$',
activate,
{'backend': 'custombackend.RedirectBackend'},
name='registration_activate'),
url(r'^register/$',
register,
{'backend': 'custombackend.RedirectBackend'},
name='registration_register'),
estás hablando WH ¿Usted hace el registro, o cuando se activa a través del correo electrónico? –
Después de registrarse, se activa por correo electrónico y luego, cuando finaliza la activación, esperaría que lo redireccionaran a la página que intentaba visitar originalmente. –