密码重置自定义验证消息

时间:2019-02-11 08:37:21

标签: django django-forms django-templates django-views

我正在使用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'),

2 个答案:

答案 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

这对我来说非常有效。