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'] widgets = { 'start_time':forms.DateInput(attrs={ 'class':'datetimepicker' }), } class FilterLogsForm(forms.ModelForm): class Meta: model = Slot fields = ['start_time','end_time'] widgets = { 'start_time':forms.DateInput(attrs={ 'class':'datetimepicker', 'name': 'start_date', 'readonly':'readonly' }), 'end_time':forms.DateInput(attrs={ 'class':'datetimepicker', 'name':'end_date', 'readonly':'readonly' }), }