1 | # Create your views here.
|
---|
2 |
|
---|
3 | from django.core import serializers
|
---|
4 | from django.http import HttpResponse
|
---|
5 | from django.forms.models import modelformset_factory, inlineformset_factory
|
---|
6 | from django.forms.models import BaseModelFormSet
|
---|
7 | from django.template import RequestContext
|
---|
8 |
|
---|
9 | from django.shortcuts import render_to_response, get_object_or_404
|
---|
10 | from running.models import Result, RunningUser
|
---|
11 | import json
|
---|
12 |
|
---|
13 | def user_index(request, user_name):
|
---|
14 | running_user = get_object_or_404(RunningUser, username=user_name)
|
---|
15 | ResultFormSet = modelformset_factory(Result, fields=('date', 'distance', 'time'), exclude=('user'), extra=3, can_delete=True)
|
---|
16 | if request.method == 'POST':
|
---|
17 | if not request.user.is_authenticated():
|
---|
18 | return HttpResponseForbidden('Not Logged In!')
|
---|
19 | formset = ResultFormSet(request.POST, request.FILES)
|
---|
20 | if formset.is_valid():
|
---|
21 | instances = formset.save(commit=False)
|
---|
22 | for instance in instances:
|
---|
23 | instance.user = running_user
|
---|
24 | instance.save()
|
---|
25 | result_list = Result.objects.filter(user=running_user).order_by('date')
|
---|
26 | formset = ResultFormSet(queryset=result_list)
|
---|
27 | else:
|
---|
28 | result_list = Result.objects.filter(user=running_user).order_by('date')
|
---|
29 | formset = ResultFormSet(queryset=result_list)
|
---|
30 | return render_to_response('user_index.html', { 'runninguser' : running_user, 'formset' : formset, 'request' : request }, context_instance=RequestContext(request))
|
---|
31 |
|
---|
32 | def index(request):
|
---|
33 | user_list = RunningUser.objects.all()
|
---|
34 | return render_to_response('index.html', { 'user_list' : user_list })
|
---|
35 |
|
---|
36 | def zoom(request):
|
---|
37 | result_list = Result.objects.values_list('date', 'distance')
|
---|
38 | json_list = []
|
---|
39 | # Output date object in epoch milliseconds as JavaScript find this easy to use.
|
---|
40 | for (date,distance) in result_list:
|
---|
41 | json_list.append({'x': int(date.strftime("%s")) * 1000, 'y' : float(distance)})
|
---|
42 |
|
---|
43 | data = json.dumps(json_list, ensure_ascii=False, indent=2)
|
---|
44 | return HttpResponse(data,mimetype="application/json")
|
---|
45 |
|
---|
46 | def json_user_column(request,user_id):
|
---|
47 | user = get_object_or_404(RunningUser, pk=user_id)
|
---|
48 | result_list = Result.objects.filter(user=user).values_list('date', 'distance')
|
---|
49 |
|
---|
50 | total_list = {}
|
---|
51 | for (date,distance) in result_list:
|
---|
52 | key = date.strftime("%Y-%m")
|
---|
53 | if total_list.has_key(key):
|
---|
54 | total_list[key] += distance
|
---|
55 | else:
|
---|
56 | total_list[key] = distance
|
---|
57 |
|
---|
58 | json_object = { 'label' : [] , 'data' : [] }
|
---|
59 | for (date,distance) in total_list.iteritems():
|
---|
60 | json_object['label'].append(date)
|
---|
61 | json_object['data'].append(float(distance))
|
---|
62 | data = json.dumps(json_object, ensure_ascii=False, indent=2)
|
---|
63 | return HttpResponse(data,mimetype="application/json")
|
---|
64 |
|
---|
65 | def json_user_total(request,user_id):
|
---|
66 | user = get_object_or_404(RunningUser, pk=user_id)
|
---|
67 | result_list = Result.objects.filter(user=user).values_list('date', 'distance')
|
---|
68 | json_list = []
|
---|
69 | distance_total = 0.0
|
---|
70 | # Output date object in epoch milliseconds as JavaScript find this easy to use.
|
---|
71 | for (date,distance) in result_list:
|
---|
72 | distance_total += float(distance)
|
---|
73 | json_list.append({'x': int(date.strftime("%s")) * 1000, 'y' : distance_total})
|
---|
74 | data = json.dumps(json_list, ensure_ascii=False, indent=2)
|
---|
75 | return HttpResponse(data,mimetype="application/json")
|
---|
76 |
|
---|
77 | def json_user_speed(request,user_id):
|
---|
78 | user = get_object_or_404(RunningUser, pk=user_id)
|
---|
79 | result_list = Result.objects.filter(user=user).values_list('date', 'distance', 'time')
|
---|
80 | json_list = []
|
---|
81 | # Output date object in epoch milliseconds as JavaScript find this easy to use.
|
---|
82 | for (date,distance,time) in result_list:
|
---|
83 | hour = float(time.second + time.minute * 60) / 3600 + time.hour
|
---|
84 | if hour == 0:
|
---|
85 | continue
|
---|
86 | json_list.append({'x': int(date.strftime("%s")) * 1000, 'y' : float(distance) / hour})
|
---|
87 | data = json.dumps(json_list, ensure_ascii=False, indent=2)
|
---|
88 | return HttpResponse(data,mimetype="application/json")
|
---|