diff options
Diffstat (limited to 'testapp/exam/forms.py')
-rw-r--r-- | testapp/exam/forms.py | 130 |
1 files changed, 105 insertions, 25 deletions
diff --git a/testapp/exam/forms.py b/testapp/exam/forms.py index a5ca26f..7bbf601 100644 --- a/testapp/exam/forms.py +++ b/testapp/exam/forms.py @@ -1,44 +1,57 @@ from django import forms -from exam.models import Profile +from exam.models import Profile,Quiz,Question from django.contrib.auth import authenticate from django.contrib.auth.models import User +from taggit.managers import TaggableManager +from taggit.forms import TagField +from taggit_autocomplete_modified.managers import TaggableManagerAutocomplete +from taggit_autocomplete_modified.widgets import TagAutocomplete +from taggit_autocomplete_modified import settings from string import letters, punctuation, digits +import datetime + +QUESTION_TYPE_CHOICES = ( + ("python", "Python"), + ("bash", "Bash"), + ("mcq", "MCQ"), + ) UNAME_CHARS = letters + "._" + digits PWD_CHARS = letters + punctuation + digits class UserRegisterForm(forms.Form): + """A Class to create new form for User's Registration. + It has the various fields and functions required to register + a new user to the system""" - username = forms.CharField(max_length=30, - help_text='Letters, digits, period and underscores only.') + username = forms.CharField\ + (max_length=30, help_text='Letters, digits,\ + period and underscores only.') email = forms.EmailField() - password = forms.CharField(max_length=30, - widget=forms.PasswordInput()) - confirm_password = forms.CharField(max_length=30, - widget=forms.PasswordInput()) + 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, - help_text="Use a dummy if you don't have one.") - 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/Researcher/Industry/etc.') + roll_number = forms.CharField\ + (max_length=30, help_text="Use a dummy if you don't have one.") + 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/Researcher/Industry/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) + User.objects.get(username__exact=u_name) raise forms.ValidationError("Username already exists.") except User.DoesNotExist: return u_name @@ -46,8 +59,8 @@ class UserRegisterForm(forms.Form): 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") + raise forms.ValidationError("Only letters, digits and punctuation\ + are allowed in password") return pwd def clean_confirm_password(self): @@ -80,16 +93,83 @@ class UserRegisterForm(forms.Form): return u_name, pwd class UserLoginForm(forms.Form): - username = forms.CharField(max_length = 30) + """Creates a form which will allow the user to log into the system.""" + + 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) - + try: + u_name, pwd = self.cleaned_data["username"],\ + self.cleaned_data["password"] + user = authenticate(username=u_name, password=pwd) + except Exception: + raise forms.ValidationError\ + ("Username and/or Password is not entered") if not user: raise forms.ValidationError("Invalid username/password") - return user +class QuizForm(forms.Form): + """Creates a form to add or edit a Quiz. + It has the related fields and functions required.""" + + start_date = forms.DateField(initial=datetime.date.today) + duration = forms.IntegerField() + active = forms.BooleanField(required = False) + tags = TagField(widget=TagAutocomplete()) + description = forms.CharField(max_length=256, widget=forms.Textarea\ + (attrs={'cols':20,'rows':1})) + + def save(self): + start_date = self.cleaned_data["start_date"] + duration = self.cleaned_data["duration"] + active = self.cleaned_data['active'] + description = self.cleaned_data["description"] + + new_quiz = Quiz() + new_quiz.start_date = start_date + new_quiz.duration = duration + new_quiz.active = active + new_quiz.description = description + new_quiz.save() + +class QuestionForm(forms.Form): + """Creates a form to add or edit a Question. + It has the related fields and functions required.""" + + summary = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) + description = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) + points = forms.FloatField() + test = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) + options = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1}),required=False) + type = forms.CharField(max_length=8, widget=forms.Select\ + (choices=QUESTION_TYPE_CHOICES)) + active = forms.BooleanField(required=False) + tags = TagField(widget=TagAutocomplete(),required=False) + snippet = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1}),required=False) + + def save(self): + summary = self.cleaned_data["summary"] + description = self.cleaned_data["description"] + points = self.cleaned_data['points'] + test = self.cleaned_data["test"] + options = self.cleaned_data['options'] + type = self.cleaned_data["type"] + active = self.cleaned_data["active"] + + new_question = Question() + new_question.summary = summary + new_question.description = description + new_question.points = points + new_question.test = test + new_question.options = options + new_question.type = type + new_question.active = active + new_question.save() |