您好,我正在尝试在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'),
此外,我为每个视图设置模板。
答案 0 :(得分:0)
有时它有助于检查Django源代码本身,因此,如果您不了解所发生的情况,请务必深入研究。
如果您查看PasswordResetForm
中save()
的{{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);