cha*_*lav 1 python passwords django reset programmatically-created
我遇到了一个问题,我不得不将超过200个新用户加载到我的django应用程序中,并立即向他们发送密码重置电子邮件.这必须只发生一次,只由我做,并在后端安静地运行.上网冲浪只给我一个或多或少的正确答案:在没有浏览器的情况下触发django中的密码重置电子邮件?.唯一的问题是这篇文章大约4年了,当然当我尝试解决方案时,它没有用...
我提到的链接中最有价值的两点:
1)在更新版本的Django中,我们需要调用form.is_valid()
2)在save()时发送电子邮件.
这是我如何查询我需要的用户并向他们发送密码重置链接:
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'
Run Code Online (Sandbox Code Playgroud)
1)通常PasswordResetForm使用来自前端的"请求",这是我没有的.所以我只创建了一个.
2)当我跟踪链接中的示例时,它失败了..它在请求中找不到服务器名称.(这是有道理的,因为我无处不在实例化我的请求)
3)当我修复服务器名称时,它要求服务器端口.由于我使用https,我的端口是443,否则使用默认端口.4)如果您使用https,请不要忘记在保存表单时指明它(use_https = True)
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |