summaryrefslogtreecommitdiff
path: root/allotter/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'allotter/forms.py')
-rw-r--r--allotter/forms.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/allotter/forms.py b/allotter/forms.py
new file mode 100644
index 0000000..0623ff5
--- /dev/null
+++ b/allotter/forms.py
@@ -0,0 +1,111 @@
+
+from django import forms
+from allotter.models import Profile
+from django.forms.extras.widgets import SelectDateWidget
+
+from django.contrib.auth import authenticate
+from django.contrib.auth.models import User
+
+from string import digits, letters, punctuation
+
+from allotter.models import BIRTH_YEAR_CHOICES, GENDER_CHOICES, EXAMINATION_SUBJECTS, CATEGORIES
+
+PWD_CHARS = letters + punctuation + digits
+
+class RegistrationForm(forms.Form):
+ #5 Digit Registration Number would be used as username
+ username = forms.IntegerField(help_text="Enter your Registration Number")
+
+ password = forms.CharField(max_length=30,
+ widget=forms.PasswordInput())
+
+ confirm_password = forms.CharField(max_length=30,
+ widget=forms.PasswordInput())
+
+ email = forms.EmailField()
+
+ first_name = forms.CharField(max_length=30)
+ last_name = forms.CharField(max_length=30)
+
+ app_no = forms.IntegerField(help_text="Enter your Application Number")
+
+ exam_code = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
+ choices=EXAMINATION_SUBJECTS,
+ help_text="Options available depends on the qualified Exam")
+
+ #All India Rank
+ air = forms.DecimalField(help_text="All India Rank")
+
+ dob = forms.DateField(widget=SelectDateWidget(years=BIRTH_YEAR_CHOICES))
+
+ gender = forms.ChoiceField(widget=forms.RadioSelect, choices=GENDER_CHOICES)
+ category = forms.ChoiceField(widget=forms.RadioSelect, choices=CATEGORIES)
+
+ #Physical Disability
+ pd = forms.BooleanField()
+
+
+ def clean_username(self):
+ u_name = self.cleaned_data["username"]
+
+ if str(u_name).strip(digits) and len(u_name) != 7:
+ msg = "Not a valid Registration Number"
+ raise forms.ValidationError(msg)
+
+ try:
+ User.objects.get(username__exact = u_name)
+ raise forms.ValidationError("Registration Number already exists.")
+ except User.DoesNotExist:
+ return u_name
+
+
+ def clean_password(self):
+ pwd = self.cleaned_data['password']
+ if pwd.strip(PWD_CHARS):
+ raise forms.ValidationError("Only letters, digits and punctuation \
+ are allowed in password")
+
+ def clean_confirm_password(self):
+ c_pwd = self.cleaned_data['confirm_password']
+ pwd = self.data['password']
+ if c_pwd != pwd:
+ raise forms.ValidationError("Passwords do not match")
+
+ return c_pwd
+
+ def save(self):
+ u_name = self.cleaned_data["username"]
+ pwd = self.cleaned_data["password"]
+ email = self.cleaned_data['email']
+ new_user = User.objects.create_user(u_name, email, pwd)
+
+ new_user.first_name = self.cleaned_data["first_name"]
+ new_user.last_name = self.cleaned_data["last_name"]
+ new_user.save()
+ cleaned_data = self.cleaned_data
+ new_profile = Profile(user=new_user)
+ new_profile.exam_code = cleaned_data["exam_code"]
+ new_profile.gender = cleaned_data["gender"]
+ new_profile.rank = cleaned_data["air"]
+ new_profile.category = cleaned_data["category"]
+ new_profile.dob = cleaned_date["dob"]
+ new_profile.application_number = cleaned_data["app_no"]
+ new_profile.save()
+
+ return u_name, pwd
+
+class UserLoginForm(forms.Form):
+ username = forms.IntegerField(help_text="Registration Number of Applicant")
+ password = forms.CharField(max_length=30, widget=forms.PasswordInput(),
+ help_text="Keep it safe")
+
+ def clean(self):
+ super(UserLoginForm, self).clean()
+ u_name, pwd = self.cleaned_data["username"], self.cleaned_data["password"]
+ user = authenticate(username = u_name, password = pwd)
+
+ if not user:
+ raise forms.ValidationError("Invalid username/password")
+
+ return user
+