Я не могу отобразить сообщения об ошибках в Django формах аутентификации - PullRequest
0 голосов
/ 17 января 2020

У меня возникают проблемы при попытке отобразить сообщения об ошибках в разных формах аутентификации

  1. В форме сброса пароля: я пытаюсь добиться отображения сообщения об ошибке типа «Электронная почта отсутствует в нашей базе данных», когда пользователь вводит незарегистрированный адрес электронной почты.
  2. в форме установки пароля: я пытаюсь отобразить «Новые пароли и подтвердить, что пароли не совпадают» и любые другие сообщения, относящиеся к форме

Ниже приведены мои коды

на forms.py

from django.contrib.auth.forms import PasswordResetForm

class PasswordReset(PasswordResetForm):
    email = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control form-control-lg', 'placeholder':'Email'}))

class SetPassword(SetPasswordForm):
    new_password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-lg', 'placeholder':'New Password'}))
    new_password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-lg', 'placeholder':'Confirm Password'}))

на urls.py

urlpatterns = [
 path(
        'reset-password/',
        auth_views.PasswordResetView.as_view(template_name='backend/reset-password.html', 
        email_template_name='backend/password-reset-email.html', form_class=PasswordReset), name='password_reset'
     ),

 path(
        'password-reset/<uidb64>/<token>/',
        auth_views.PasswordResetConfirmView.as_view(template_name='backend/password-confirm-form.html',
        form_class=SetPassword), name='password_reset_confirm'
     ),
]

при сбросе пароля. html

<form class="pt-3" method="post">
    {% if form.errors %}
    <div class="alert alert-danger">{{ form.errors }}</div>
    {% endif %}
    <div class="form-group">
      {{ form.email }}
    </div>
    <input type='submit' value='Reset Password'>
</form> 

при подтверждении пароля. html

<form method="post">
{% if form.errors %}
    <div class="alert alert-danger">{{ form.errors }}</div>
{% endif %}
<div class="form-group">
      {{ form.new_password1  }}
</div>
<div class="form-group">
      {{ form.new_password2 }}
</div>
<input type="submit" value="Change Password">
</form> 

1 Ответ

0 голосов
/ 17 января 2020

Вам нужно обновить несколько вещей в форме. Для SetPassword:

class SetPassword(SetPasswordForm):
    error_messages = {
        'password_mismatch': _('New Passwords and Confirm Passwords not matching'),
    }

И в ResetPassword форме:

class PasswordReset(PasswordResetForm):
    def clean_email(self):
        email = self.cleaned_data['email']
        if not User.objects.filter(email = email).exists():
            raise ValidationError('Email not in our database')
        return email
...