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

时间:2018-02-17 12:00:48

标签: python django django-views

我有var randomnumber = function() { return Math.floor(Math.random()*10); } while(true){ let number = randomnumber(); yourguess=prompt("Please Enter A Number Between 1-10"); if(!yourguess) { break; } if(number===parseInt(yourguess)){ alert("Good Job"); answer=prompt("Do You Want To Play More ? Y/N"); if(!RegExp("y","gi").test(answer) || !answer){ break; } }else{ alert("Not Matched "+ number); } }个自定义Django 2.0.2模型。其中一个功能是为匿名用户提供创建订单的方式,而无需"注册优先"在现场。

主要思想是:

  • 匿名用户填写订单,输入电子邮件地址并点击User;
  • Django使用输入的电子邮件和随机生成的密码创建Create Order;
  • 接下来,Django(或Celery)发送电子邮件链接以重置密码(如标准重置表格);
  • 用户查看电子邮件并单击重置链接,重新输入自己的密码。

这被两个函数杀死了一个:用户注册并创建第一个订单。

问题:如何从我的自定义视图发送重置密码邮件?我了解到,链接会在User视图中生成并发送,但如何在自定义视图中调用它们?

1 个答案:

答案 0 :(得分:0)

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

如另一个stackoverflow回答https://stackoverflow.com/a/30068895/9394660所述,表单可以这样填写:

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

另外,根据具体情况,您可能已经有了请求,并且不需要创建一个