如何从自定义Django视图发送密码重置邮件?

3
我有一个使用自定义User模型的Django 2.0.2项目。其中一个功能是为匿名用户提供在未“注册”的情况下创建订单的方式。
主要思路如下:
- 匿名用户填写订单表格,输入电子邮件地址并点击“创建订单”; - Django使用输入的电子邮件和随机生成的密码创建User; - 接下来,Django(或Celery)会向电子邮件发送重置密码链接(就像标准重置表单一样); - 用户检查电子邮件并单击重置链接,重新输入自己的密码。
这样一来,我们就可以通过一个功能实现两个目的:用户注册和创建第一个订单。
问题是:我该如何从自定义视图中发送重置密码邮件呢?我知道链接将在PasswordResetView视图上生成并发送,但如何在自定义视图上调用它们呢?
1个回答

3

要从视图发送密码重置链接,您可以填写PasswordResetForm,这是由PasswordResetView使用的内容。 https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth.forms.PasswordResetForm

如另一个stackoverflow答案所述https://dev59.com/tIrda4cB1Zd3GeqPNocV#30068895,可以像这样填写表单:

from django.contrib.auth.forms import PasswordResetForm

form = PasswordResetForm({'email': user.email})

if form.is_valid():
    request = HttpRequest()
    request.META['SERVER_NAME'] = 'www.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')

注意:如果您没有使用https,请将端口替换为80,不要包括use_https=True。
此外,根据情况,您可能已经有一个请求,无需创建新的请求。

这段代码放在哪里?它如何覆盖默认表单? - dopatraman
它放在你想从中发送电子邮件的视图中。 - hwhite4
它不会覆盖或编辑表单,而是创建一个填充实例。我知道这已经过了几年,但其他人可能仍然会发现这很有用。 - dacx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接