annotate contests/views.py @ 697:67f8d49a9377

Cleaned up the code a bit. Separated the S3 stuff out into its own class. This class maybe should be in core. Still want to do some kind of context manager around the temporary file we are creating to ensure it gets deleted.
author Brian Neal <bgneal@gmail.com>
date Sun, 08 Sep 2013 21:02:58 -0500
parents 89b240fe9297
children 16e190fa6ef8
rev   line source
bgneal@540 1 """
bgneal@540 2 Views for the contests application.
bgneal@540 3
bgneal@540 4 """
bgneal@679 5 import json
bgneal@679 6
bgneal@540 7 from django.http import (HttpResponse, HttpResponseForbidden,
bgneal@540 8 HttpResponseBadRequest)
bgneal@540 9 from django.shortcuts import get_object_or_404
bgneal@540 10 from django.views.decorators.http import require_POST
bgneal@540 11
bgneal@540 12 from contests.models import Contest
bgneal@540 13
bgneal@540 14
bgneal@540 15 @require_POST
bgneal@540 16 def enter(request):
bgneal@540 17 """
bgneal@540 18 This view is an AJAX view that is used to enter or withdraw a user from a
bgneal@540 19 given contest. This function toggles the user's entered state in the
bgneal@540 20 contest.
bgneal@540 21
bgneal@540 22 """
bgneal@540 23 if not request.user.is_authenticated():
bgneal@540 24 return HttpResponseForbidden("Please login first")
bgneal@540 25
bgneal@540 26 contest_id = request.POST.get('contest_id')
bgneal@540 27 if not contest_id:
bgneal@540 28 return HttpResponseBadRequest("Missing contest_id")
bgneal@540 29
bgneal@540 30 contest = get_object_or_404(Contest, pk=contest_id)
bgneal@540 31 if not contest.can_enter():
bgneal@540 32 return HttpResponseForbidden("Contest is over")
bgneal@540 33
bgneal@540 34 # Toggle the user's state in the contest
bgneal@540 35
bgneal@540 36 result = {}
bgneal@540 37 if request.user in contest.contestants.all():
bgneal@540 38 contest.contestants.remove(request.user)
bgneal@540 39 result['entered'] = False
bgneal@540 40 result['msg'] = 'You have been withdrawn from this contest.'
bgneal@540 41 else:
bgneal@540 42 contest.contestants.add(request.user)
bgneal@540 43 result['entered'] = True
bgneal@540 44 result['msg'] = 'You have been entered into this contest!'
bgneal@540 45
bgneal@679 46 json_result = json.dumps(result)
bgneal@679 47 return HttpResponse(json_result, content_type='application/json')