from django import forms """ slower clean() method using regex def clean(self, value): import re if not re.search('[a-zA-Z]+', value) or not re.search('[0-9]+', value): raise forms.ValidationError(u'Your password must include at least \ one letter and at least one number.') """ # Password Field (Extends CharField) (Optimized Version) import string class PasswordField(forms.CharField): # Setup the Field def __init__(self, *args, **kwargs): super(PasswordField, self).__init__(min_length = 7, required = True, label = u'Password', widget = forms.PasswordInput(render_value = False), *args, **kwargs) # Validate - 1+ Numbers, 1+ Letters def clean (self, value): # Setup Our Lists of Characters and Numbers characters = list(string.letters) numbers = [str(i) for i in range(10)] # Assume False until Proven Otherwise numCheck = False charCheck = False # Loop until we Match for char in value: if not charCheck: if char in characters: charCheck = True if not numCheck: if char in numbers: numCheck = True if numCheck and charCheck: break if not numCheck or not charCheck: raise forms.ValidationError(u'Your password must include at least \ one letter and at least one number.') return super(PasswordField, self).clean(value)