1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
from django import forms
from exam.models import Profile
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from string import letters, punctuation, digits
import datetime
QUESTION_TYPE_CHOICES = (
("python", "Python"),
("bash", "Bash"),
("mcq", "MultipleChoice"),
)
UNAME_CHARS = letters + "._" + digits
PWD_CHARS = letters + punctuation + digits
class UserRegisterForm(forms.Form):
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())
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.')
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 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()
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"]
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()
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):
start_date = forms.DateField(initial=datetime.date.today)
duration = forms.IntegerField()
active = forms.BooleanField(required = False)
description = forms.CharField(max_length=256, widget=forms.Textarea(attrs={'cols':20,'rows':2}))
class AddQuestionForm(forms.Form):
summary = forms.CharField(max_length = 128)
description = forms.CharField(widget = forms.Textarea(attrs={'cols': 20, 'rows': 3}))
points = forms.FloatField()
test = forms.CharField(widget = forms.Textarea(attrs={'cols': 20, 'rows': 3}))
options = forms.CharField(widget = forms.Textarea(attrs={'cols': 20, 'rows': 3}))
type = forms.CharField(max_length=24, widget=forms.Select(choices=QUESTION_TYPE_CHOICES))
active = forms.BooleanField(required=False)
|