Django восстановление пароля, проверить введённую пользователем почту email

На странице для сброса пароля через почту, я хочу проверить какую почту ввёл пользователь мне ВАЖНО что бы она заканчивалась на @yandex.ru

  • views.py

     class UserForgotPasswordView(SuccessMessageMixin, PasswordResetView):
         """
         Представление по сбросу пароля по почте
         """
    
         form_class = UserForgotPasswordForm
         template_name = 'registeruser/user_password_reset.html'
         success_url = reverse_lazy('login')
         success_message = 'Письмо с инструкцией по восстановлению пароля отправлена на ваш email'
         subject_template_name = 'registeruser/email/password_subject_reset_mail.txt'
         email_template_name = 'registeruser/email/password_reset_mail.html'
    
         def get_context_data(self, **kwargs): 
             context = super().get_context_data(**kwargs)
             context['title'] = 'Запрос на восстановление пароля'
             return context
    
     class UserPasswordResetConfirmView(SuccessMessageMixin, PasswordResetConfirmView):
         """
         Представление установки нового пароля
         """
    
         form_class = UserSetNewPasswordForm
         template_name = 'registeruser/user_password_set_new.html'
         success_url = reverse_lazy('login')
         success_message = 'Пароль успешно изменен. Можете авторизоваться на сайте.'
    
         def get_context_data(self, **kwargs):
             context = super().get_context_data(**kwargs)
             context['title'] = 'Установить новый пароль'
             return context
    
  • forms.py

     class UserForgotPasswordForm(PasswordResetForm):
         """
         Запрос на восстановление пароля
         """
         def __init__(self, *args, **kwargs):
             """
             Обновление стилей формы
             """
             super().__init__(*args, **kwargs)
             for field in self.fields:
                 self.fields[field].widget.attrs.update({
                 'class': 'form-control',
                 'autocomplete': 'off'
             })
    
    
     class UserSetNewPasswordForm(SetPasswordForm):
         """
         Изменение пароля пользователя после подтверждения
         """
         def __init__(self, *args, **kwargs):
             """
             Обновление стилей формы
             """
             super().__init__(*args, **kwargs)
             for field in self.fields:
                 self.fields[field].widget.attrs.update({
                 'class': 'form-control',
                 'autocomplete': 'off'
             })
    
  • urls.py

     urlpatterns = [
         path('password-reset/', UserForgotPasswordView.as_view(), name='password_reset'),
         path('set-new-password/<uidb64>/<token>/', UserPasswordResetConfirmView.as_view(), name='password_reset_confirm'),
     ]
    

Внутри формы можешь определить clean для общих проверок или для определенного поля в формате clean_{field_name} - типо def clean_email(self) и там провести нужную проверку, оно вызовется «само». Значение твоих полей будут в self.cleaned_data

Вместо split по "@" можно проверить через endswith

Вернуться на верх