diff options
Diffstat (limited to 'models.py')
-rw-r--r-- | models.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/models.py b/models.py new file mode 100644 index 0000000..46a24e8 --- /dev/null +++ b/models.py @@ -0,0 +1,37 @@ +from django.db import models +from django import forms +import re + +class ChangePasswordForm(forms.Form): + new_password = forms.CharField(widget=forms.PasswordInput) + new_password_again = forms.CharField(widget=forms.PasswordInput) + + def clean(self): + ''' + Validate the password submitted. + ''' + cleaned_data = self.cleaned_data + # The two submitted strings need to match. + new_password = cleaned_data.get('new_password') + new_password_again = cleaned_data.get('new_password_again') + if new_password != new_password_again: + raise forms.ValidationError('The typed passwords do not \ +match.') + # Check that the length is at least 8 characters. + if not len(new_password) >= 8: + raise forms.ValidationError('Your password needs to be at \ +least 8 characters long. Currently %d characters.' % len(new_password)) + # The password needs to contain at least one number, one upper + # and one lower case letter and one special character. + if not re.search('\d+', new_password): + raise forms.ValidationError('You need at least one number \ +in your password.') + if not re.search('[a-z]', new_password) or not re.search( + '[A-Z]', new_password): + raise forms.ValidationError('You need at least one upper \ +case letter and one lower case letter in your password.') + if not re.search('[,.\[\]!@#$%^&*?_\(\)-]', new_password): + raise forms.ValidationError('You need at least one special \ +character i.e. ,.[]!@#$%^&*?_()-') + + return cleaned_data |