¿Cómo puedo forzar el envío de correo electrónico de activación al usuario? P.ej. cuando accidentalmente elimina el correo, hace clic en el enlace en mi sitio web, y django le enviará un nuevo correo electrónico de activación.Django-registration - alguna activación
Respuesta
Hay un admin action para hacerlo. Desde el django-registration docs:
No hay forma automática incorporada de hacer esta figura (cómo debe django-registro que un visitante al azar es el tipo que llena el formulario de registro hace 3 días y se elimina el correo de activación ?).
Puede iniciar sesión y hacer clic en "reenviar correo electrónico de activación" en su perfil ... se usa con frecuencia en muchos sitios web. – DJpython
Mi solución (feo) era crear mi propio punto de vista entrada:
from django.contrib.auth.views import login as django_login
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
redirect_authenticated=None,
authentication_form=AuthenticationForm):
"""
Redirect to redirect_authenticated if user is authenticated or
delegate to contrib login otherwise.
"""
form = authentication_form(data=request.POST)
if request.method == "POST":
if not form.is_valid():
non_field_errors = form.non_field_errors()
if non_field_errors:
# test if the account is not active
user_inactive = non_field_errors[0].find(_("This account is inactive.")) != -1
if user_inactive:
return render_to_response(template_name, {
'form': form,
'user_inactive' : user_inactive,
}, context_instance=RequestContext(request))
return django_login(request, template_name=template_name,
redirect_field_name=redirect_field_name,
authentication_form=authentication_form)
Y a continuación, utilizar la variable de contexto en plantilla:
{% if user_inactive %}
<a href="/activation/resend/">Resend activation link</a>
{% else %}
<a href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a>
{% endif %}
Cuando el usuario hace clic en el enlace de activación de reenvío, Aparece un formulario que solicita el correo electrónico registrado. Al enviar el formulario se activa un nuevo correo electrónico de activación de cuenta.
Espero que esto ayude.
La siguiente función de vista presentará un formulario con un solo campo de correo electrónico, luego verifica si hay usuarios con este correo electrónico aún no activado, recrear el código de activación si ha caducado (el hash fue copiado de RegistrationProfile) y finalmente enviar el correo electrónico de activación.
class ResendActivationEmailForm(forms.Form):
email = EmailField(required=True)
def resend_activation_email(request):
context = Context()
form = None
if request.method == 'POST':
form = ResendActivationEmailForm(request.POST)
if form.is_valid():
email = form.cleaned_data["email"]
users = User.objects.filter(email=email, is_active=0)
if not users.count():
form._errors["email"] = (_("Account for email address is not registered or already activated."),)
for user in users:
for profile in RegistrationProfile.objects.filter(user=user):
if profile.activation_key_expired():
salt = sha_constructor(str(random())).hexdigest()[:5]
profile.activation_key = sha_constructor(salt+user.username).hexdigest()
user.date_joined = datetime.now()
user.save()
profile.save()
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
profile.send_activation_email(site)
context.update({"form" : form})
return render_to_response("registration/resend_activation_email_done.html", context)
if not form:
form = ResendActivationEmailForm()
context.update({"form" : form})
return render_to_response("registration/resend_activation_email_form.html", context)
¿Dónde pongo esta función? No quiero cambiar mi versión descargada de django-registration así que puse view.py de mi aplicación (habiendo puesto el formulario en forms.py) y obtengo este error: el nombre global 'RegistrationProfile' es no definido – HenryM
He actualizado la ilya b. método resend_activation_email. El método anterior muestra el error de sha deprecation en python> = 2.5
def resend_activation_email(request):
if not request.user.is_anonymous():
return HttpResponseRedirect('/')
context = Context()
form = None
if request.method == 'POST':
form = ResendActivationEmailForm(request.POST)
if form.is_valid():
email = form.cleaned_data["email"]
users = User.objects.filter(email=email, is_active=0)
if not users.count():
form._errors["email"] = ("Account for email address is not registered or already activated.")
for user in users:
for profile in RegistrationProfile.objects.filter(user=user):
if profile.activation_key_expired():
salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
profile.activation_key = hashlib.sha1(salt+user.email).hexdigest()
user.date_joined = datetime.datetime.now()
user.save()
profile.save()
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
profile.send_activation_email(site)
context.update({"form" : form})
return render(request, 'registration/resend_activation_email_done.html', context)
if not form:
form = ResendActivationEmailForm()
context.update({"form" : form})
return render(request, 'registration/resend_activation_email_form.html', context)
¿Dónde pongo esta función? No quiero cambiar mi versión descargada de django-registration así que puse view.py de mi aplicación (habiendo puesto el formulario en forms.py) y obtengo este error: el nombre global 'RegistrationProfile' es no definida – HenryM
- 1. Jquery datepicker - activación manual
- 2. Activación jQuery Validación manualmente?
- 3. Orden de activación EventListenerList
- 4. java nio Selector de activación
- 5. Problemas de activación en Z3
- 6. ¿Hay alguna manera de lograr la activación inversa del perfil de maven por propiedad?
- 7. ¿Existe alguna manera "estándar" de implementar la Activación de software para .NET?
- 8. Activación de advertencias de migración
- 9. Delphi: Mostrar ventana sin activación
- 10. Activación de PHP desde ActiveMQ
- 11. Quartz: activación de varios trabajos
- 12. Activación de validación en la página Carga
- 13. Activación y objeto variable en JavaScript?
- 14. efectos de activación no funciona con IE8
- 15. Activación del evento onmouseover programáticamente en JavaScript
- 16. Enviar correo electrónico de activación al usuario
- 17. Licencias de aplicaciones y pensamientos de activación
- 18. C#/WPF: no KeyBinding activación de comandos
- 19. Eventos de red troncal en el modelo de activación en la recopilación (doble activación)
- 20. Prevenir el clic desde el evento de activación del elemento principal de activación infantil
- 21. Activación Flyspell modo da un error
- 22. Deshabilitar Activar el servidor SQL de activación
- 23. Prevenir la activación de onUpdate of WidgetProvider
- 24. Implementación de ClickOnce "Falló la activación" FileNotFoundException
- 25. activación beforeRemove, afterAdd manipuladores en KnockoutJS
- 26. GWT Widget - excluyen mutuamente botón de activación
- 27. Activación de una recursión en java
- 28. isótopo y Desplazamiento infinito con activación manual
- 29. Algoritmo de clave de activación- Seguridad
- 30. Activación/desactivación del reactivación de voltajes
¿Puede darnos más detalles? ¿Qué enlace? – kzh
Usuario accidentalmente borró el correo electrónico. Luego, inicia sesión en el sitio web y hace clic en el enlace, que le reenvía el enlace de activación. Mi pregunta es: ¿cómo puedo hacer ese enlace? Wtah debería estar en el archivo de vista. – DJpython
Desafortunadamente, django-registration establece is_active en False hasta que el usuario haga clic en el enlace. La función de inicio de sesión de django predeterminada comprueba que is_active sea True. Yo también estoy buscando una manera de permitir a los usuarios iniciar sesión y elegir volver a enviar el correo electrónico. Creo que requerirá grandes cambios en django-registration y agregar un perfil de usuario con otro campo booleano que indique si confirmaron su correo electrónico o no. Su sitio debe verificar esta marca cuando autoriza a los usuarios a ver partes restringidas de su sitio. – mhost