from django import forms from django.contrib.auth.forms import PasswordResetForm as BasePasswordResetForm from django.contrib.auth.forms import SetPasswordForm as BaseSetPasswordForm from django.contrib.auth.tokens import default_token_generator from django.core.exceptions import ValidationError from django.utils.text import gettext_lazy as _ from web.mixins import StylingMixin class PasswordResetForm(StylingMixin, BasePasswordResetForm): styled_fields = ['email'] placeholder_for_field = {'email': _('pablo@shoppy.com')} class SetPasswordForm(StylingMixin, BaseSetPasswordForm): styled_fields = ['new_password1', 'new_password2'] placeholder_for_field = {'new_password1': '********', 'new_password2': '********'} token = forms.CharField(required=True, widget=forms.HiddenInput(), validators=[]) def validate_token(self): is_valid = default_token_generator.check_token(self.user, self.data.get('token')) if not is_valid: raise ValidationError(_('El token no es vĂ¡lido o ha expirado')) def is_valid(self): try: self.validate_token() except ValidationError as e: self.add_error('token', str(e)) return False return super().is_valid()