bring over forms and views form pycon for now

This commit is contained in:
Luke Hatcher 2012-07-12 01:32:07 -04:00
parent 3ca56663a4
commit d31953b544
2 changed files with 79 additions and 0 deletions

30
symposion/forms.py Normal file
View file

@ -0,0 +1,30 @@
from django import forms
import account.forms
class SignupForm(account.forms.SignupForm):
first_name = forms.CharField()
last_name = forms.CharField()
email_confirm = forms.EmailField(label="Confirm Email")
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
del self.fields["username"]
self.fields.keyOrder = [
"email",
"email_confirm",
"first_name",
"last_name",
"password",
"password_confirm"
]
def clean_email_confirm(self):
email = self.cleaned_data.get("email")
email_confirm = self.cleaned_data["email_confirm"]
if email:
if email != email_confirm:
raise forms.ValidationError("Email address must match previously typed email address")
return email_confirm

49
symposion/views.py Normal file
View file

@ -0,0 +1,49 @@
import hashlib
import random
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
import account.views
import symposion.forms
class SignupView(account.views.SignupView):
form_class = symposion.forms.SignupForm
def create_user(self, form, commit=True):
user_kwargs = {
"first_name": form.cleaned_data["first_name"],
"last_name": form.cleaned_data["last_name"]
}
return super(SignupView, self).create_user(form, commit=commit, **user_kwargs)
def generate_username(self, form):
def random_username():
h = hashlib.sha1(form.cleaned_data["email"]).hexdigest()[:25]
# don't ask
n = random.randint(1, (10 ** (5 - 1)) - 1)
return "%s%d" % (h, n)
while True:
try:
username = random_username()
User.objects.get(username=username)
except User.DoesNotExist:
break
return username
class LoginView(account.views.LoginView):
form_class = account.forms.LoginEmailForm
@login_required
def dashboard(request):
if request.session.get("pending-token"):
return redirect("speaker_create_token", request.session["pending-token"])
return render(request, "dashboard.html")