¿Cómo activar mediante progtwigción el restablecimiento de la contraseña del correo electrónico en django 1.7.6?

He encontrado un problema en el que tuve que cargar más de 200 usuarios nuevos en mi aplicación django y de inmediato enviarles un correo electrónico para restablecer la contraseña. Esto tenía que suceder solo una vez, hecho solo por mí y ejecutado en silencio en el backend. Navegar por Internet me llevó solo a una respuesta más o menos correcta: ¿ Desea restablecer la contraseña de correo electrónico en django sin navegador? . El único problema fue que esta publicación tenía aproximadamente 4 años y, por supuesto, cuando probé la solución, no funcionó …

Dos puntos más valiosos del enlace que mencioné:
1) En la versión más reciente de Django necesitamos llamar a form.is_valid ()
2) El envío del correo electrónico se realiza al guardar ().

Aquí es cómo pregunté a los usuarios que necesitaba y les envié a cada uno un enlace para restablecer la contraseña:

def find_users_and_send_email(): from django.http import HttpRequest from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.models import User users = User.objects.filter(date_joined__gt = '2015-04-16') for user in users: try: if user.email: log.info("Sending email for to this email:", user.email) form = PasswordResetForm({'email': user.email}) assert form.is_valid() request = HttpRequest() request.META['SERVER_NAME'] = 'help.mydomain.com' request.META['SERVER_PORT'] = '443' form.save( request= request, use_https=True, from_email="username@gmail.com", email_template_name='registration/password_reset_email.html') except Exception as e: log.info(e) continue return 'done' 

1) Por lo general, PasswordResetForm funciona con una “solicitud” desde el front-end, que no tenía. Así que simplemente creé uno.
2) Cuando seguí el ejemplo en el enlace, falló. No se pudo encontrar el nombre del servidor en la solicitud. (Tiene sentido porque hice una instancia de mi solicitud de la nada)
3) Cuando arreglé el nombre del servidor, pidió el puerto del servidor. Desde que utilicé https, mi puerto es 443, de lo contrario, use el puerto predeterminado. 4) Si usa https, no olvide indicarlo cuando guarde el formulario ( use_https = True )