有没有办法在不通过电子邮件发送重置 link 的情况下使用 Django 的默认密码重置?

Is there a way to use Django's default password reset without sending reset link via email?

有没有办法在不通过电子邮件发送重置链接或不使用电子邮件选项的情况下使用 django 的内置密码重置功能。我目前正在开发一个简单的系统,有几个用户,发送电子邮件不是提前needed.Thanks

我不熟悉 django,但我之前开发过其他应用程序,在这些应用程序中,任何用户(甚至是初始管理员)都可以通过密码重置获得访问权限。在所有这些情况下,工作方法都是相似的——重置 link 由一些 URL 存根加上在某个数据库 table 某处找到的唯一键组成。手动组装 link 并使用它效果很好,尽管一个系统使用 emailsentdate 列并拒绝执行任何操作,除非它被填充,所以如果你没有通过简单的方法获得成功,请检查是否有类似的东西

如果您绝对需要一个电子邮件服务器,那么确实存在一些简单的供开发人员使用的服务器,例如 smtpdev,它们的行为就像一个 smtp 服务器,可以欺骗需要一个电子邮件服务器的应用程序,但它们不会将电子邮件发送到在任何地方,他们只是展示它们。用于调试,但如果 django 坚持配置一个看起来像真实邮件服务器的服务器,可能会对您有所帮助

您可以使用表单更改密码,并在 views.py 中使用函数

make_password()

if passwordForm.is_valid():
                password = passwordForm.cleaned_data['password']
                request.user.password = make_password(password)
                request.user.save()

[make_password][1]https://docs.djangoproject.com/en/1.11/topics/auth/passwords/

django.contrib.auth 中有一些选项允许您更改密码而无需发送电子邮件:

  • PasswordChangeForm:一种允许用户通过输入旧密码来更改密码的表单。
  • SetPasswordForm:一种让用户无需输入旧密码即可更改密码的表单

您可以在您的视图中实现其中之一来更改用户密码。