Mercurial > public > sg101
diff accounts/views.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/accounts/views.py@2c2df8545112 |
children | 8e6b8ffe5f34 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accounts/views.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,117 @@ +""" +Views for the accounts application. + +""" +import datetime +import logging + +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.template.loader import render_to_string +from django.contrib.auth.models import User +from django.http import HttpResponse, HttpResponseRedirect +from django.core.urlresolvers import reverse +from django.conf import settings +from django.contrib.auth.forms import AuthenticationForm +from django.contrib.auth import login +from django.utils import simplejson + +from accounts.models import PendingUser +from accounts.forms import RegisterForm +from accounts import create_new_user +from antispam.decorators import rate_limit + + +####################################################################### + +@rate_limit(count=10, interval=datetime.timedelta(minutes=1)) +def register(request): + if request.user.is_authenticated(): + return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) + + if request.method == 'POST': + form = RegisterForm(request.POST, ip=request.META.get('REMOTE_ADDR', '?')) + if form.is_valid(): + form.save() + return HttpResponseRedirect(reverse('accounts.views.register_thanks')) + else: + form = RegisterForm() + + return render_to_response('accounts/register.html', { + 'form': form, + }, + context_instance = RequestContext(request)) + +####################################################################### + +def register_thanks(request): + if request.user.is_authenticated(): + return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) + + return render_to_response('accounts/register_thanks.html', + context_instance = RequestContext(request)) + +####################################################################### + +def register_confirm(request, username, key): + if request.user.is_authenticated(): + return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL) + + # purge expired users + + PendingUser.objects.purge_expired() + + ip = request.META.get('REMOTE_ADDR', '?') + try: + pending_user = PendingUser.objects.get(username = username) + except PendingUser.DoesNotExist: + logging.error('Accounts register_confirm [%s]: user does not exist: %s', ip, username) + return render_to_response('accounts/register_failure.html', { + 'username': username, + }, + context_instance = RequestContext(request)) + + if pending_user.key != key: + logging.error('Accounts register_confirm [%s]: key error: %s', ip, username) + return render_to_response('accounts/register_failure.html', { + 'username': username, + }, + context_instance = RequestContext(request)) + + create_new_user(pending_user, ip) + + return render_to_response('accounts/register_success.html', { + 'username': username, + }, + context_instance = RequestContext(request)) + +####################################################################### + +@rate_limit(count=10, interval=datetime.timedelta(minutes=1), + lockout=datetime.timedelta(minutes=2)) +def login_ajax(request): + """ + This view function handles a login via AJAX. + + """ + if not request.is_ajax(): + return HttpResponseRedirect(reverse('accounts-login')) + + response = { + 'success': False, + 'error': '', + 'navbar_html': '' + } + + if request.method == "POST": + form = AuthenticationForm(data=request.POST) + if form.is_valid(): + login(request, form.get_user()) + response['success'] = True + response['navbar_html'] = render_to_string('navbar.html', + {'user': request.user}, RequestContext(request)) + else: + response['error'] = 'Invalid username or password' + + return HttpResponse(simplejson.dumps(response), + content_type='application/json')