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()