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