diff options
Diffstat (limited to 'exam/forms.py')
-rw-r--r-- | exam/forms.py | 77 |
1 files changed, 71 insertions, 6 deletions
diff --git a/exam/forms.py b/exam/forms.py index 164e334..38466e8 100644 --- a/exam/forms.py +++ b/exam/forms.py @@ -1,15 +1,80 @@ from django import forms from exam.models import Profile -class UserRegisterForm(forms.ModelForm): +from django.contrib.auth import authenticate +from django.contrib.auth.models import User +from string import letters, punctuation + +UNAME_CHARS = letters + "." +PWD_CHARS = letters + punctuation + +class UserRegisterForm(forms.Form): + + username = forms.CharField(max_length=30) + email = forms.EmailField() + password = forms.CharField(max_length=30, widget=forms.PasswordInput()) + confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput()) first_name = forms.CharField(max_length=30) last_name = forms.CharField(max_length=30) roll_number = forms.CharField(max_length=30) - email_address = forms.EmailField() - #password = forms.CharField(max_length=30, widget=forms.PasswordInput()) - class Meta: - model = Profile - fields = ['first_name', 'last_name', 'roll_number'] + def clean_username(self): + u_name = self.cleaned_data["username"] + + if u_name.strip(UNAME_CHARS): + raise forms.ValidationError("Only letters and period character are \ + allowed in username") + + try: + User.objects.get(username__iexact = u_name) + raise forms.ValidationError("Username 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 and punctuation are \ + allowed in password") + return pwd + + 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"] + u_name = u_name.lower() + 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() + + new_profile = Profile(user=new_user) + new_profile.roll_number = self.cleaned_data["roll_number"] + new_profile.save() + + return u_name, pwd + +class UserLoginForm(forms.Form): + username = forms.CharField(max_length = 30) + password = forms.CharField(max_length=30, widget=forms.PasswordInput()) + + 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 |