summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--allotter/__init__.py2
-rw-r--r--allotter/forms.py111
-rw-r--r--allotter/migrations/0002_auto__add_field_option_exam.py91
-rw-r--r--allotter/migrations/0003_auto__del_field_profile_roll_number__add_field_profile_application_num.py142
-rw-r--r--allotter/models.py60
-rw-r--r--allotter/urls.py8
-rw-r--r--allotter/views.py78
-rw-r--r--settings.py10
-rw-r--r--template/.base.html.swpbin0 -> 12288 bytes
-rw-r--r--template/allotter/.login.html.swpbin0 -> 12288 bytes
-rw-r--r--template/allotter/.register.html.swpbin0 -> 12288 bytes
-rw-r--r--template/allotter/hello.html11
-rw-r--r--template/allotter/login.html20
-rw-r--r--template/allotter/register.html17
-rw-r--r--template/base.html23
-rw-r--r--urls.py1
16 files changed, 545 insertions, 29 deletions
diff --git a/allotter/__init__.py b/allotter/__init__.py
index e69de29..b48e5a0 100644
--- a/allotter/__init__.py
+++ b/allotter/__init__.py
@@ -0,0 +1,2 @@
+import os
+
diff --git a/allotter/forms.py b/allotter/forms.py
new file mode 100644
index 0000000..0623ff5
--- /dev/null
+++ b/allotter/forms.py
@@ -0,0 +1,111 @@
+
+from django import forms
+from allotter.models import Profile
+from django.forms.extras.widgets import SelectDateWidget
+
+from django.contrib.auth import authenticate
+from django.contrib.auth.models import User
+
+from string import digits, letters, punctuation
+
+from allotter.models import BIRTH_YEAR_CHOICES, GENDER_CHOICES, EXAMINATION_SUBJECTS, CATEGORIES
+
+PWD_CHARS = letters + punctuation + digits
+
+class RegistrationForm(forms.Form):
+ #5 Digit Registration Number would be used as username
+ username = forms.IntegerField(help_text="Enter your Registration Number")
+
+ password = forms.CharField(max_length=30,
+ widget=forms.PasswordInput())
+
+ confirm_password = forms.CharField(max_length=30,
+ widget=forms.PasswordInput())
+
+ email = forms.EmailField()
+
+ first_name = forms.CharField(max_length=30)
+ last_name = forms.CharField(max_length=30)
+
+ app_no = forms.IntegerField(help_text="Enter your Application Number")
+
+ exam_code = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
+ choices=EXAMINATION_SUBJECTS,
+ help_text="Options available depends on the qualified Exam")
+
+ #All India Rank
+ air = forms.DecimalField(help_text="All India Rank")
+
+ dob = forms.DateField(widget=SelectDateWidget(years=BIRTH_YEAR_CHOICES))
+
+ gender = forms.ChoiceField(widget=forms.RadioSelect, choices=GENDER_CHOICES)
+ category = forms.ChoiceField(widget=forms.RadioSelect, choices=CATEGORIES)
+
+ #Physical Disability
+ pd = forms.BooleanField()
+
+
+ def clean_username(self):
+ u_name = self.cleaned_data["username"]
+
+ if str(u_name).strip(digits) and len(u_name) != 7:
+ msg = "Not a valid Registration Number"
+ raise forms.ValidationError(msg)
+
+ try:
+ User.objects.get(username__exact = u_name)
+ raise forms.ValidationError("Registration Number 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")
+
+ 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"]
+ 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.exam_code = cleaned_data["exam_code"]
+ new_profile.gender = cleaned_data["gender"]
+ new_profile.rank = cleaned_data["air"]
+ new_profile.category = cleaned_data["category"]
+ new_profile.dob = cleaned_date["dob"]
+ new_profile.application_number = cleaned_data["app_no"]
+ new_profile.save()
+
+ return u_name, pwd
+
+class UserLoginForm(forms.Form):
+ username = forms.IntegerField(help_text="Registration Number of Applicant")
+ password = forms.CharField(max_length=30, widget=forms.PasswordInput(),
+ help_text="Keep it safe")
+
+ 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
+
diff --git a/allotter/migrations/0002_auto__add_field_option_exam.py b/allotter/migrations/0002_auto__add_field_option_exam.py
new file mode 100644
index 0000000..9d6773c
--- /dev/null
+++ b/allotter/migrations/0002_auto__add_field_option_exam.py
@@ -0,0 +1,91 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Option.exam'
+ db.add_column('allotter_option', 'exam', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['allotter.Exam']), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Option.exam'
+ db.delete_column('allotter_option', 'exam_id')
+
+
+ models = {
+ 'allotter.application': {
+ 'Meta': {'object_name': 'Application'},
+ 'editable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'exam_taken': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['allotter.Exam']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['allotter.Option']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['allotter.Profile']"}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '24'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'allotter.exam': {
+ 'Meta': {'object_name': 'Exam'},
+ 'exam_code': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'exam_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'allotter.option': {
+ 'Meta': {'object_name': 'Option'},
+ 'exam': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': "orm['allotter.Exam']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'opt_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'seats': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'allotter.profile': {
+ 'Meta': {'object_name': 'Profile'},
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'dob': ('django.db.models.fields.DateTimeField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'roll_number': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['allotter']
diff --git a/allotter/migrations/0003_auto__del_field_profile_roll_number__add_field_profile_application_num.py b/allotter/migrations/0003_auto__del_field_profile_roll_number__add_field_profile_application_num.py
new file mode 100644
index 0000000..b198a47
--- /dev/null
+++ b/allotter/migrations/0003_auto__del_field_profile_roll_number__add_field_profile_application_num.py
@@ -0,0 +1,142 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting field 'Profile.roll_number'
+ db.delete_column('allotter_profile', 'roll_number')
+
+ # Adding field 'Profile.application_number'
+ db.add_column('allotter_profile', 'application_number', self.gf('django.db.models.fields.IntegerField')(default=1, max_length=20), keep_default=False)
+
+ # Adding field 'Profile.exam_code'
+ db.add_column('allotter_profile', 'exam_code', self.gf('django.db.models.fields.CharField')(default=1, max_length=30), keep_default=False)
+
+ # Adding field 'Profile.rank'
+ db.add_column('allotter_profile', 'rank', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=6), keep_default=False)
+
+ # Adding field 'Profile.gender'
+ db.add_column('allotter_profile', 'gender', self.gf('django.db.models.fields.CharField')(default='M', max_length=10), keep_default=False)
+
+ # Adding field 'Profile.pd'
+ db.add_column('allotter_profile', 'pd', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
+
+ # Deleting field 'Option.exam'
+ db.delete_column('allotter_option', 'exam_id')
+
+ # Adding M2M table for field exam on 'Option'
+ db.create_table('allotter_option_exam', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('option', models.ForeignKey(orm['allotter.option'], null=False)),
+ ('exam', models.ForeignKey(orm['allotter.exam'], null=False))
+ ))
+ db.create_unique('allotter_option_exam', ['option_id', 'exam_id'])
+
+
+ def backwards(self, orm):
+
+ # Adding field 'Profile.roll_number'
+ db.add_column('allotter_profile', 'roll_number', self.gf('django.db.models.fields.CharField')(default='', max_length=20), keep_default=False)
+
+ # Deleting field 'Profile.application_number'
+ db.delete_column('allotter_profile', 'application_number')
+
+ # Deleting field 'Profile.exam_code'
+ db.delete_column('allotter_profile', 'exam_code')
+
+ # Deleting field 'Profile.rank'
+ db.delete_column('allotter_profile', 'rank')
+
+ # Deleting field 'Profile.gender'
+ db.delete_column('allotter_profile', 'gender')
+
+ # Deleting field 'Profile.pd'
+ db.delete_column('allotter_profile', 'pd')
+
+ # Adding field 'Option.exam'
+ db.add_column('allotter_option', 'exam', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['allotter.Exam']), keep_default=False)
+
+ # Removing M2M table for field exam on 'Option'
+ db.delete_table('allotter_option_exam')
+
+
+ models = {
+ 'allotter.application': {
+ 'Meta': {'object_name': 'Application'},
+ 'editable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'exam_taken': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['allotter.Exam']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['allotter.Option']", 'symmetrical': 'False'}),
+ 'profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['allotter.Profile']"}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '24'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'allotter.exam': {
+ 'Meta': {'object_name': 'Exam'},
+ 'exam_code': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'exam_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'allotter.option': {
+ 'Meta': {'object_name': 'Option'},
+ 'exam': ('django.db.models.fields.related.ManyToManyField', [], {'default': '1', 'to': "orm['allotter.Exam']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'opt_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'seats': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'allotter.profile': {
+ 'Meta': {'object_name': 'Profile'},
+ 'application_number': ('django.db.models.fields.IntegerField', [], {'max_length': '20'}),
+ 'category': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'dob': ('django.db.models.fields.DateTimeField', [], {}),
+ 'exam_code': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+ 'gender': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'pd': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'rank': ('django.db.models.fields.IntegerField', [], {'max_length': '6'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['allotter']
diff --git a/allotter/models.py b/allotter/models.py
index 20814e7..44b86e0 100644
--- a/allotter/models.py
+++ b/allotter/models.py
@@ -10,8 +10,10 @@ EXAMINATION_SUBJECTS = (
)
CATEGORIES = (
- ("GEN", "GENERAL"),
- ("OBC", "OTHER BACKWARD CASTE"),
+ ("GEN", "GEN"),
+ ("OBC", "OBC(Non-Creamy Layer)"),
+ ("SC", "SC"),
+ ("ST", "ST"),
)
AVAILABLE_OPTIONS = (
@@ -27,22 +29,10 @@ APPLICATION_STATUS = (
("I", "Incomplete"),
("Submitted", "Submitted"))
+BIRTH_YEAR_CHOICES = ('1989', '1990', '1991')
-class Option(models.Model):
-
- opt_name = models.CharField(max_length=100,
- verbose_name=u"Option name",
- help_text=u"Name of Option/Stream",
- choices = AVAILABLE_OPTIONS)
-
- seats = models.IntegerField(verbose_name=u"Seats available")
-
- class Meta:
- verbose_name_plural = "Options"
-
- def __unicode__(self):
- return self.opt_name
+DEFAULT_EXAM_ID = 1
class Exam(models.Model):
@@ -59,21 +49,47 @@ class Exam(models.Model):
return self.exam_name
+class Option(models.Model):
+
+ opt_name = models.CharField(max_length=100,
+ verbose_name=u"Option name",
+ help_text=u"Name of Option/Stream",
+ choices = AVAILABLE_OPTIONS)
+
+ seats = models.IntegerField(verbose_name=u"Seats available")
+
+ exam = models.ManyToManyField(Exam, default=DEFAULT_EXAM_ID)
+
+ class Meta:
+ verbose_name_plural = "Options"
+
+ def __unicode__(self):
+ return self.opt_name
+
+
class Profile(models.Model):
user = models.OneToOneField(User)
- roll_number = models.CharField(max_length=20,
- verbose_name=u"Examination Roll number",
- help_text=u"Roll number as per the Examination Hall ticket")
+ application_number = models.IntegerField(max_length=20,
+ verbose_name=u"Examination Application number",
+ help_text=u"Application number as per the Examination Hall ticket")
dob = models.DateTimeField(verbose_name=u"Date of Birth",
help_text=u"Date of birth as given in the application")
category = models.CharField(max_length=30, choices=CATEGORIES)
+ exam_code = models.CharField(max_length=30, choices=EXAMINATION_SUBJECTS)
+
+ rank = models.IntegerField(max_length=6)
+
+ gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
+
+ pd = models.BooleanField(default=False)
+
def __unicode__(self):
- return self.name
+ return self.user.application_number
class Application(models.Model):
"""An application for the student - one per student
@@ -92,6 +108,10 @@ class Application(models.Model):
editable = models.BooleanField(default=True)
+ def is_application_editable(self):
+ if self.status == "I": return True
+ else: return False
+
def __unicode__(self):
u = self.user
return u'Application for {0} {1}'.format(u.first_name, u.last_name)
diff --git a/allotter/urls.py b/allotter/urls.py
new file mode 100644
index 0000000..349c645
--- /dev/null
+++ b/allotter/urls.py
@@ -0,0 +1,8 @@
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('allotter.views',
+ url(r'^$', 'index'),
+ url(r'^login/$', 'user_login'),
+ url(r'^register/$', 'user_register'),
+ url(r'^hello/$', 'hello'),
+)
diff --git a/allotter/views.py b/allotter/views.py
index 60f00ef..037941f 100644
--- a/allotter/views.py
+++ b/allotter/views.py
@@ -1 +1,77 @@
-# Create your views here.
+from django.contrib.auth import login, logout, authenticate
+from django.shortcuts import render_to_response, get_object_or_404, redirect
+from django.template import RequestContext
+from django.http import Http404
+
+from allotter.models import Profile
+from allotter.forms import RegistrationForm, UserLoginForm
+
+from settings import URL_ROOT
+
+def index(request):
+ """The start page.
+ """
+ user = request.user
+ if user.is_authenticated():
+ return redirect("/allotter/hello/")
+
+ return redirect("/allotter/login/")
+
+def user_register(request):
+ """ Register a new user.
+ Create a user and corresponding profile and store roll_number also."""
+
+ user = request.user
+ if user.is_authenticated():
+ return redirect("/allotter/hello/")
+
+ if request.method == "POST":
+ form = RegistrationForm(request.POST)
+ if form.is_valid():
+ data = form.cleaned_data
+ u_name, pwd = form.save()
+
+ new_user = authenticate(username = u_name, password = pwd)
+ login(request, new_user)
+ return redirect("/allotter/login/")
+
+ else:
+ return render_to_response('allotter/register.html',
+ {'form':form},
+ context_instance=RequestContext(request))
+ else:
+ form = RegistrationForm()
+ return render_to_response('allotter/register.html',
+ {'form':form},
+ context_instance=RequestContext(request))
+
+def user_login(request):
+ """Take the credentials of the user and log the user in."""
+
+ user = request.user
+ if user.is_authenticated():
+ return redirect("/allotter/hello/")
+
+ if request.method == "POST":
+ form = UserLoginForm(request.POST)
+ if form.is_valid():
+ user = form.cleaned_data
+ login(request, user)
+ return redirect("/allotter/hello/")
+ else:
+ context = {"form": form}
+ return render_to_response('allotter/login.html', context,
+ context_instance=RequestContext(request))
+ else:
+ form = UserLoginForm()
+ context = {"form": form}
+ return render_to_response('allotter/login.html', context,
+ context_instance=RequestContext(request))
+
+def hello(request):
+ user = request.user
+ context = {'user': user}
+ ci = RequestContext(request)
+ return render_to_response('allotter/hello.html', context,
+ context_instance=ci)
+
diff --git a/settings.py b/settings.py
index 3105bcc..65b43d9 100644
--- a/settings.py
+++ b/settings.py
@@ -23,6 +23,8 @@ DATABASES = {
}
}
+URL_ROOT = ''
+
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
@@ -129,14 +131,6 @@ INSTALLED_APPS = (
'allotter',
)
-ACCOUNT_ACTIVATION_DAYS = 7
-EMAIL_HOST='localhost'
-EMAIL_PORT=1025
-EMAIL_HOST_USER=''
-EMAIL_HOST_PASSWORD=''
-EMAIL_USE_TLS=False
-DEFAULT_FROM_EMAIL='primal@fossee.in'
-
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
diff --git a/template/.base.html.swp b/template/.base.html.swp
new file mode 100644
index 0000000..7665dc6
--- /dev/null
+++ b/template/.base.html.swp
Binary files differ
diff --git a/template/allotter/.login.html.swp b/template/allotter/.login.html.swp
new file mode 100644
index 0000000..2d4c20f
--- /dev/null
+++ b/template/allotter/.login.html.swp
Binary files differ
diff --git a/template/allotter/.register.html.swp b/template/allotter/.register.html.swp
new file mode 100644
index 0000000..17a7483
--- /dev/null
+++ b/template/allotter/.register.html.swp
Binary files differ
diff --git a/template/allotter/hello.html b/template/allotter/hello.html
new file mode 100644
index 0000000..0d07c7f
--- /dev/null
+++ b/template/allotter/hello.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block title %} Welcome Note {% endblock %}
+
+{% block content %}
+<h2>Hello, there</h2>
+
+<p> Welcome <strong>{{user.first_name.title}} {{user.last_name.title}}</strong>,
+to JAM 2012 allotment! </p>
+
+{% endblock content %}
diff --git a/template/allotter/login.html b/template/allotter/login.html
new file mode 100644
index 0000000..8eaf4df
--- /dev/null
+++ b/template/allotter/login.html
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+
+{% block title %}Login{% endblock title %}
+
+{% block content %}
+<p> Welcome to the Allotment.
+Please login to proceed.</p>
+
+<form action="" method="post">
+{% csrf_token %}
+
+<table>
+{{ form.as_table }}
+</table>
+
+<input type="submit" value="Login" />
+</form>
+<!-- <a href="{{URL_ROOT}}/exam/forgotpassword/">Forgot Password</a> <br /> -->
+<a href="{{URL_ROOT}}/allotter/register/">New User Registration</a>
+{% endblock content %}
diff --git a/template/allotter/register.html b/template/allotter/register.html
new file mode 100644
index 0000000..d7d04b9
--- /dev/null
+++ b/template/allotter/register.html
@@ -0,0 +1,17 @@
+{% extends "base.html" %}
+
+{% block title %}Registration form {% endblock %}
+
+{% block content %}
+Please provide the following details.
+<form action="" method="post">
+{% csrf_token %}
+
+<table>
+{{ form.as_table }}
+</table>
+
+<input type="submit" value="Register" />
+</form>
+
+{% endblock content %}
diff --git a/template/base.html b/template/base.html
new file mode 100644
index 0000000..d10402c
--- /dev/null
+++ b/template/base.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <style>
+ input.required, error {
+ border: 2px solid red;
+ }
+ </style>
+ <title>{% block title %}Tagging Exploration{% endblock %}</title>
+</head>
+
+<body>
+ <div id="sidebar">
+ {% block sidebar %}{% endblock %}
+ </div>
+
+ <div id="content">
+ {% block content %}{% endblock %}
+ {% block main_content %}{% endblock %}
+ </div>
+</body>
+</html>
diff --git a/urls.py b/urls.py
index d180de6..f5fdfe0 100644
--- a/urls.py
+++ b/urls.py
@@ -5,6 +5,7 @@ from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
+ url(r'^allotter/', include('allotter.urls')),
# Examples:
# url(r'^$', 'aloha.views.home', name='home'),
# url(r'^aloha/', include('aloha.foo.urls')),