【问题标题】:Trigger password reset email in django without browser?在没有浏览器的情况下在 django 中触发密码重置电子邮件?
【发布时间】:2011-08-01 10:33:33
【问题描述】:

我希望能够使用 django.contrib.auth.views.password_reset 发送密码重置电子邮件 但不使用浏览器 - password_reset 需要一个填充的表单,有没有办法可以通过编程方式创建它并发送电子邮件?

【问题讨论】:

  • “没有浏览器”/“不是没有浏览器”。什么?
  • @S.Lott - 嘿,问题输入得很糟糕:)

标签: django forms passwords reset


【解决方案1】:
from django.contrib.auth.forms import PasswordResetForm

def reset_password(email, from_email, template='registration/password_reset_email.html'):
    """
    Reset the password for all (active) users with given E-Mail adress
    """
    form = PasswordResetForm({'email': email})
    return form.save(from_email=from_email, email_template_name=template)

【讨论】:

  • 如果您收到重定向错误,则需要将模板添加到您的 url,如下所述:stackoverflow.com/questions/4790838/…
  • 请注意,在更新的 Django 版本中(不完全确定从哪个开始),您需要在 form.save() 之前调用 form.is_valid()
  • 如果您从视图中调用 form.save(),您可能还需要将请求作为参数之一传递... form.save(request=request, ...)跨度>
  • 如果您不发送“请求”,您可能需要添加一个“domain_override”kwarg 来保存。如form.save(from_email=from_email, mail_template_name=template, domain_override="localhost:8000") 这样可以防止AttributeError: 'NoneType' object has no attribute 'get_host'
【解决方案2】:

您可以使用 django.contrib.auth.forms.PasswordResetForm 并使用如下数据填充它:

form = PasswordResetForm({'email':'sample@sample.com'})

电子邮件的发送是在 save() 时完成的。

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 2011-02-14
    • 2018-02-06
    • 2020-02-15
    • 2020-09-26
    • 1970-01-01
    • 2011-06-06
    • 2020-06-03
    • 2019-07-03
    相关资源
    最近更新 更多