Django密码重设多个

时间:2019-03-17 12:29:08

标签: python django authentication

您好,我正在尝试在Django中创建密码重置视图。我已经设置了邮件后端以及URL和模板。一切看起来不错,但是当我尝试发送邮件以重置密码时,Django正在发送多封电子邮件。例如,同时输入7或11个密码重设电子邮件。如何每次只发送一封电子邮件。

非常感谢

这就是我所做的:

setting.py:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST_USER = "my_email"
EMAIL_HOST_PASSWORD = "my_password"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

urls.py

path('password-reset/',
     auth_views.PasswordResetView.as_view(template_name='accounts/password_reset.html'),
     name='password_reset'),
path('password-reset/done/',
     auth_views.PasswordResetDoneView.as_view(template_name='accounts/password_reset_done.html'),
     name='password_reset_done'),
path('password-set-confirm/<uidb64>/<token>/',
     auth_views.PasswordResetConfirmView.as_view(template_name='accounts/password_reset_confirm.html'),
     name='password_reset_confirm'),
path('password-set-complete/',
     auth_views.PasswordResetCompleteView.as_view(template_name='accounts/password_reset_complete.html'),
     name='password_reset_complete'),

此外,我为每个视图设置模板。

4 个答案:

答案 0 :(得分:0)

有时它有助于检查Django源代码本身,因此,如果您不了解所发生的情况,请务必深入研究。

如果您查看PasswordResetFormsave()的{​​{1}}方法,您会发现它遍历django.contrib.auth.forms,然后发送一封(也只有一封)电子邮件每个self.get_users(email)

因此,发送多封电子邮件的唯一方法是,如果有多个用户具有相同的user

答案 1 :(得分:0)

我不认为它们是相同的设置,您可能最终多次调用相同的URL可能不是逻辑问题。  尝试使用调试模式或在打印语句的帮助下。

答案 2 :(得分:0)

如果这仍然是一个问题...如果您有多个“测试用户”,并且使用相同的电子邮件地址创建了他们,则可能导致您的问题

答案 3 :(得分:0)

PasswordResetForm 具有 get_users() 方法,该方法返回电子邮件中的所有活动用户名。我们可以覆盖该方法以仅返回传递给它的 1 个用户。这样,密码重置电子邮件将仅发送给我们选择的 1 个用户。

email = 'your email here'
form = MyPasswordResetFormSpecificUser({'email': email})
assert form.is_valid()
form.user = 'User object who needs password reset'

# use https only when running on GAE
form.save(
    request=self.request,
    use_https=False # True if you are deploying to https url
)

然后你可以在你的视图中使用这个新的表单类,如下所示:

cout<<execle("/bin/ls","bin/ls",NULL);