在没有浏览器的情况下在 django 中触发密码重置电子邮件?
Posted
技术标签:
【中文标题】在没有浏览器的情况下在 django 中触发密码重置电子邮件?【英文标题】:Trigger password reset email in django without browser? 【发布时间】:2011-08-01 10:33:33 【问题描述】:我希望能够使用 django.contrib.auth.views.password_reset 发送密码重置电子邮件 但不使用浏览器 - password_reset 需要一个填充的表单,有没有办法可以通过编程方式创建它并发送电子邮件?
【问题讨论】:
“没有浏览器”/“不是没有浏览器”。什么? @S.Lott - 嘿,问题输入得很糟糕:) 【参考方案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,如下所述:***.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() 时完成的。
【讨论】:
以上是关于在没有浏览器的情况下在 django 中触发密码重置电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?
我们如何在没有列表理解的情况下在 m2m 字段的 django 管理面板中显示用户
我可以在没有自动 ID 的情况下在 Django 中创建模型吗?