diff options
Diffstat (limited to 'sbhs/forms.py')
-rw-r--r-- | sbhs/forms.py | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/sbhs/forms.py b/sbhs/forms.py new file mode 100644 index 0000000..85b272f --- /dev/null +++ b/sbhs/forms.py @@ -0,0 +1,119 @@ +try: + from string import letters +except ImportError: + from string import ascii_letters as letters +from string import digits, punctuation + +from django import forms +from django.conf import settings +from django.utils import timezone +from django.contrib.auth.models import User + + +from .models import Profile, Slot +from .send_emails import generate_activation_key + +UNAME_CHARS = letters + "._" + digits +PWD_CHARS = letters + punctuation + digits + + +class UserLoginForm(forms.Form): + """ + User loginform + """ + username=forms.CharField(max_length=30) + password=forms.CharField(max_length=30, widget=forms.PasswordInput()) + + +class UserRegistrationForm(forms.Form): + name = forms.CharField(max_length=50) + email = forms.EmailField() + username=forms.CharField(max_length=30,help_text='Letters, digits, period \ + and underscores only.') + + password=forms.CharField(max_length=30, widget=forms.PasswordInput()) + confirm_password=forms.CharField( + max_length=30, widget=forms.PasswordInput() + ) + roll_number = forms.CharField(max_length=30, help_text="Use a dummy if \ + you don't have") + institute=forms.CharField(max_length=128, help_text="Institute/\ + Organization.") + department=forms.CharField(max_length=64, help_text="Department you \ + work/study at.") + position = forms.CharField(max_length=64, help_text="Student/Faculty/\ + Researched/Industry/Fellowship/etc.") + + def clean_username(self): + u_name = self.cleaned_data["username"] + if u_name.strip(UNAME_CHARS): + msg="Only letters, digits, period and underscore characters are \ + allowed in username" + raise forms.ValidationError(msg) + try: + User.objects.get(username__exact=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, digits 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 clean_email(self): + user_email = self.cleaned_data['email'] + if User.objects.filter(email=user_email).exists(): + raise forms.ValidationError("This email already exists") + return user_email + + 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.name = self.cleaned_data["name"] + new_user.save() + + cleaned_data = self.cleaned_data + new_profile = Profile(user=new_user) + new_profile.roll_number=cleaned_data["roll_number"] + new_profile.institute = cleaned_data["institute"] + new_profile.department = cleaned_data["department"] + new_profile.position = cleaned_data["position"] + + if settings.IS_DEVELOPMENT: + new_profile.is_email_verified=True + else: + new_profile.activation_key = generate_activation_key( + new_user.username + ) + new_profile.key_expiry_time = timezone.now() + timezone.timedelta( + minutes=20 + ) + new_profile.save() + return u_name, pwd, new_user.email, new_profile.activation_key + + +class SlotCreationForm(forms.ModelForm): + class Meta: + model = Slot + fields = ['start_time','duration'] + widgets = { + 'start_time':forms.DateInput(attrs={ + 'class':'datetimepicker' + }), + }
\ No newline at end of file |