X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=portal%2Fforms.py;h=513b9526648f6024c982fc1412c698a1bd96a945;hb=7a3fcd0eed5066b3189d79729e95e98167988481;hp=43be69826dc52898d4e84852d5bfdaca998e8a79;hpb=b8a2aa21a0a84e867191f5d798bf68b4353bd7b5;p=unfold.git diff --git a/portal/forms.py b/portal/forms.py index 43be6982..513b9526 100644 --- a/portal/forms.py +++ b/portal/forms.py @@ -24,26 +24,79 @@ from django import forms from portal.models import PendingUser, PendingSlice #from crispy_forms.helper import FormHelper #from crispy_forms.layout import Submit +from django.utils.translation import ugettext_lazy as _ -class UserRegisterForm(forms.ModelForm): -# DEPRECATED # def __init__(self, *args, **kwargs): -# DEPRECATED # self.helper = FormHelper() -# DEPRECATED # self.helper.form_tag = False -# DEPRECATED # #self.helper.form_id = 'id-exampleForm' -# DEPRECATED # self.helper.form_class = 'blueForms' -# DEPRECATED # self.helper.form_method = 'post' -# DEPRECATED # #self.helper.form_action = 'submit_survey' -# DEPRECATED # self.helper.add_input(Submit('submit', 'Submit')) -# DEPRECATED # super(RegisterUserForm, self).__init__(*args, **kwargs) - - first_name = forms.CharField( widget=forms.TextInput ) - last_name = forms.CharField( widget=forms.TextInput ) - email = forms.CharField( widget=forms.TextInput ) - password = forms.CharField( widget=forms.PasswordInput ) - password2 = forms.CharField( widget=forms.PasswordInput ) +class UserRegisterForm(forms.Form): # Not ModelForm + """ + Form for registering a new user account. + + Validates that the requested username is not already in use, and + requires the password to be entered twice to catch typos. + + Subclasses should feel free to add any additional validation they + need, but should avoid defining a ``save()`` method -- the actual + saving of collected user data is delegated to the active + registration backend. + + """ + required_css_class = 'required' + + first_name = forms.RegexField(regex=r'^[\w.@+-]+$', + max_length=30, + label=_("First name"), + error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")}) + last_name = forms.RegexField(regex=r'^[\w.@+-]+$', + max_length=30, + label=_("Last name"), + error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")}) + email = forms.EmailField(label=_("E-mail")) + password1 = forms.CharField(widget=forms.PasswordInput, + label=_("Password")) + password2 = forms.CharField(widget=forms.PasswordInput, + label=_("Password (again)")) keypair = forms.CharField( widget=forms.FileInput ) - class Meta: - model = PendingUser + + tos = forms.BooleanField(widget=forms.CheckboxInput, + label=_(u'I have read and agree to the Terms of Service'), + error_messages={'required': _("You must agree to the terms to register")}) + +# 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.")) +# else: +# return self.cleaned_data['username'] + + def clean_email(self): + """ + Validate that the supplied email address is unique for the + site. + + """ + if PendingUser.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'] + + def clean(self): + """ + Verifiy that the values entered into the two password fields + match. Note that an error here will end up in + ``non_field_errors()`` because it doesn't apply to a single + field. + + """ + if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: + if self.cleaned_data['password1'] != self.cleaned_data['password2']: + raise forms.ValidationError(_("The two password fields didn't match.")) + return self.cleaned_data + +# DEPRECATED # class Meta: +# DEPRECATED # model = PendingUser class SliceRequestForm(forms.ModelForm): slice_name = forms.CharField( widget=forms.TextInput )