from django import forms from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _ from registration.forms import RegistrationForm class SniptRegistrationForm(RegistrationForm): """ Subclass of ``RegistrationForm`` which enforces uniqueness of email addresses and further restricts usernames. """ def clean_username(self): """ Validate that the username is alphanumeric and is not already in use. """ existing = User.objects.filter( username__iexact=self.cleaned_data['username']) if existing.exists(): raise forms.ValidationError( _("A user with that username already exists.")) elif '@' in self.cleaned_data['username']: raise forms.ValidationError(_("Cannot have '@' in username.")) elif '.' in self.cleaned_data['username']: raise forms.ValidationError(_("Cannot have '.' in username.")) elif '+' in self.cleaned_data['username']: raise forms.ValidationError(_("Cannot have '+' in username.")) else: return self.cleaned_data['username'] def clean_email(self): """ Validate that the supplied email address is unique for the site. """ if User.objects.filter(email__iexact=self.cleaned_data['email']): raise forms.ValidationError( _("""This email address is already in use. Please supply a different email address.""")) return self.cleaned_data['email']