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