Files
MarietjeDjango/marietje/marietje/forms.py

104 lines
3.5 KiB
Python

from django import forms
from django.contrib.auth.forms import AuthenticationForm as BaseAuthenticationForm, UsernameField
from django.contrib.auth import get_user_model, password_validation
from django.utils.translation import gettext_lazy as _
class AuthenticationForm(BaseAuthenticationForm):
def confirm_login_allowed(self, user):
if user.activation_token:
raise forms.ValidationError(
self.error_messages["inactive"],
code="inactive",
)
super(AuthenticationForm, self).confirm_login_allowed(user)
class RegistrationForm(forms.ModelForm):
error_messages = {
"password_mismatch": _("The two password fields didn't match."),
}
password1 = forms.CharField(
label=_("Password"),
strip=False,
widget=forms.PasswordInput,
)
password2 = forms.CharField(
label=_("Password confirmation"),
widget=forms.PasswordInput,
strip=False,
help_text=_("Enter the same password as before, for verification."),
)
class Meta:
model = get_user_model()
fields = ("email",)
field_classes = {"email": UsernameField}
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
if self._meta.model.USERNAME_FIELD in self.fields:
self.fields[self._meta.model.USERNAME_FIELD].widget.attrs.update({"autofocus": ""})
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if len(password1) < 6:
raise forms.ValidationError(
_("A password must be at least 6 characters."),
code="password_length",
)
if password1 and password2 and password1 != password2:
raise forms.ValidationError(
self.error_messages["password_mismatch"],
code="password_mismatch",
)
self.instance.username = self.cleaned_data.get("username")
password_validation.validate_password(self.cleaned_data.get("password2"), self.instance)
return password2
def clean_email(self):
email = self.cleaned_data.get("email") + "@science.ru.nl"
return email
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data.get("password1"))
if commit:
user.save()
return user
class ResetPasswordForm(forms.Form):
error_messages = {
"password_mismatch": _("The two password fields didn't match."),
}
password1 = forms.CharField(
label=_("Password"),
strip=False,
widget=forms.PasswordInput,
)
password2 = forms.CharField(
label=_("Password confirmation"),
widget=forms.PasswordInput,
strip=False,
help_text=_("Enter the same password as before, for verification."),
)
def __init__(self, *args, **kwargs):
super(ResetPasswordForm, self).__init__(*args, **kwargs)
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError(
self.error_messages["password_mismatch"],
code="password_mismatch",
)
password_validation.validate_password(self.cleaned_data.get("password2"))
return password2