Commit e48285d7 authored by Michel Rouly's avatar Michel Rouly
Browse files

Merge pull request #2 from creffett/registration-refactor

Registration refactor
parents cec860bd 9758d57c
from django import forms
from go.models import URL
from go.models import URL, RegisteredUser
from django.core.validators import MinLengthValidator, MinValueValidator, RegexValidator
from django.core.exceptions import ValidationError
from captcha.fields import CaptchaField
......@@ -64,11 +64,20 @@ class URLForm( forms.ModelForm ):
}
class SignupForm( forms.Form ):
class SignupForm( forms.ModelForm ):
def validate_username(username):
try:
registered = RegisteredUser.objects.get(username=username)
raise ValidationError('Username "%s" is already in use.' % username)
except RegisteredUser.DoesNotExist:
return
username = forms.CharField(
required = True,
label = 'Username',
label = 'Mason NetID',
max_length = 30,
validators=[validate_username],
widget = forms.TextInput(attrs={
}),
)
......@@ -87,3 +96,6 @@ class SignupForm( forms.Form ):
}),
)
captcha = CaptchaField()
class Meta:
model = RegisteredUser
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as 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 'RegisteredUser.approved'
db.add_column(u'go_registereduser', 'approved',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'RegisteredUser.approved'
db.delete_column(u'go_registereduser', 'approved')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'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'}),
u'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'})
},
u'go.registereduser': {
'Meta': {'object_name': 'RegisteredUser'},
'approved': ('django.db.models.fields.BooleanField', [], {}),
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'full_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
u'go.url': {
'Meta': {'ordering': "['short']", 'object_name': 'URL'},
'clicks': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 8, 28, 0, 0)'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '20', 'primary_key': 'True'}),
'target': ('django.db.models.fields.URLField', [], {'max_length': '1000'})
}
}
complete_apps = ['go']
\ No newline at end of file
......@@ -66,6 +66,8 @@ class RegisteredUser( models.Model ):
description = models.TextField( blank=True )
approved = models.BooleanField()
def __unicode__(self):
return '<Registered User: %s>' % self.username
return '<Registered User: %s - Approval Status: %s>' % (self.username, self.approved)
......@@ -17,8 +17,17 @@ ULife groups, and student organizations. Access is moderated by SRCT
administrators.
</p>
{% if user.is_authenticated %}
<p>
You can <a href="{% url 'signup' %}">sign up</a> for use.
<br/><br/>
</p>
{% else %}
<p>
Please <a href="{% url 'go_login' %}">log in</a> in order to submit an access
request.
<br/><br/>
</p>
{% endif %}
{% endblock %}
......@@ -17,14 +17,14 @@ Go - Login
action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<label for="username">Username</label>
<label for="username">Mason NetID</label>
<br/>
{% for error in form.username.errors %}
<p class="error">{{ error }}</p>
{% empty %}
<br/>
{% endfor %}
<input type="text" id="username" name="username" placeholder="Username"
<input type="text" id="username" name="username" placeholder="Mason NetID"
{% if form.username.errors %} class="error"{% endif %} />
<br/><br/>
......@@ -43,7 +43,7 @@ action="{% url 'django.contrib.auth.views.login' %}">
</form>
<p>You must be <a href="{% url 'signup' %}">registered</a> to use this
service.</p>
<p>You must be registered to use this service. Please log in in order to
submit a registration request.</p>
{% endblock %}
......@@ -5,7 +5,7 @@ from django.conf import settings
from django.http import Http404, HttpResponseServerError
from django.utils import timezone
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
from django.core.exceptions import PermissionDenied, ValidationError
from django.core.mail import send_mail
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
......@@ -26,7 +26,7 @@ def is_registered( user ):
try:
registered = RegisteredUser.objects.get( username=user.username )
return True
return registered.approved
except RegisteredUser.DoesNotExist:
return False
......@@ -179,6 +179,7 @@ def delete(request, short):
raise PermissionDenied()
@login_required
def signup(request):
"""
This view presents the user with a registration form. You can register
......@@ -186,14 +187,14 @@ def signup(request):
"""
form = SignupForm()
signup_form = SignupForm()
if request.method == 'POST':
form = SignupForm( request.POST )
if form.is_valid():
username = form.cleaned_data.get('username')
full_name = form.cleaned_data.get('full_name')
description = form.cleaned_data.get('description')
signup_form = SignupForm(request.POST, initial={'approved': False})
if signup_form.is_valid():
username = signup_form.cleaned_data.get('username')
full_name = signup_form.cleaned_data.get('full_name')
description = signup_form.cleaned_data.get('description')
send_mail('Signup from %s' % (username), '%s signed up at %s\n'
'Username: %s\nMessage: %s\nPlease attend to this request at '
......@@ -201,10 +202,12 @@ def signup(request):
str(timezone.now()).strip(), str(username), str(description)),
settings.EMAIL_FROM, [settings.EMAIL_TO])
signup_form.save()
return redirect('registered')
return render(request, 'signup.html', {
'form': form,
'form': signup_form,
},
)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment