我正在使用django的内置重置密码。现在的问题是,当我输入数据库中不存在的电子邮件时,不会出现电子邮件不存在的错误。如何在Django重置密码中提供验证。如果auth_table中不存在电子邮件
# Reset Password
path('password-reset/',
auth_views.PasswordResetView.as_view(
template_name='commons/password_reset/password_reset.html'
),
name='password_reset'),
path('password-reset/done/',
auth_views.PasswordResetDoneView.as_view(
template_name='commons/password_reset/password_reset_done.html'
),
name='password_reset_done'),
path('password-reset-confirm/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(
template_name='commons/password_reset/password_reset_confirm.html'
),
name='password_reset_confirm'),
path('password-reset-complete/',
auth_views.PasswordResetCompleteView.as_view(
template_name='commons/password_reset/password_reset_complete.html'
),
name='password_reset_complete'),
答案 0 :(得分:2)
您可以这样做
在forms.py
中from django.contrib.auth.forms import PasswordResetForm
class CustomEmailValidationOnForgotPassword(PasswordResetForm):
def clean_email(self):
email_id = self.cleaned_data['email']
if not User.objects.filter(email__iexact=email_id, is_active=True).exists():
raise ValidationError("Email invalid!")
return email
在urls.py中
url(r'^password-reset/$',
'django.contrib.auth.views.password_reset',
{'post_reset_redirect': '/user/password/reset/done/',
'html_email_template_name': 'registration/password_reset_email.html',
'password_reset_form': CustomEmailValidationOnForgotPassword},
name="password_reset"),
希望有帮助
有关更多详细信息,请遵循此link
答案 1 :(得分:0)
在表单中,返回 email_id。
def clean_email(self):
email_id = self.cleaned_data['email']
if not User.objects.filter(email__iexact=email_id, is_active=True).exists():
raise ValidationError("Email Invalido! Usuario Inactivo o Inexistente")
return email_id
这对我来说非常有效。