annotate bandmap/views.py @ 831:0f9c014c8adc

Bandmap: don't need to send URL to javascript client. Also tweaking note as I am noticing it isn't getting rendered correctly on all bands for some reason.
author Brian Neal <bgneal@gmail.com>
date Sun, 28 Sep 2014 20:42:57 -0500
parents b9973588af28
children f31168465953
rev   line source
bgneal@820 1 """Views for the bandmap application.
bgneal@820 2
bgneal@820 3 """
bgneal@827 4 import json
bgneal@827 5
bgneal@820 6 from django.contrib.auth.decorators import login_required
bgneal@820 7 from django.shortcuts import redirect, render
bgneal@821 8 from django.contrib import messages as django_messages
bgneal@827 9 from django.http import HttpResponse
bgneal@827 10 from django.template.loader import render_to_string
bgneal@827 11 from django.core.cache import cache
bgneal@820 12
bgneal@820 13 from bandmap.forms import BandForm
bgneal@827 14 from bandmap.models import BandEntry
bgneal@820 15
bgneal@820 16
bgneal@821 17 SUCCESS = "Successfully submitted {} for admin review. Thanks!"
bgneal@821 18
bgneal@821 19
bgneal@820 20 def map_view(request):
bgneal@820 21 return render(request, 'bandmap/map.html')
bgneal@820 22
bgneal@820 23
bgneal@820 24 @login_required
bgneal@820 25 def add_band(request):
bgneal@820 26 """
bgneal@820 27 Provides the ability for a user to submit a new band to the map.
bgneal@820 28
bgneal@820 29 """
bgneal@820 30 if request.method == 'POST':
bgneal@820 31 form = BandForm(request.POST)
bgneal@820 32 if form.is_valid():
bgneal@820 33 band = form.save(commit=False)
bgneal@820 34 band.user = request.user
bgneal@820 35 band.save()
bgneal@821 36 django_messages.success(request, SUCCESS.format(band.name))
bgneal@825 37 return redirect('bandmap-add')
bgneal@820 38 else:
bgneal@820 39 form = BandForm()
bgneal@820 40
bgneal@820 41 return render(request, 'bandmap/add.html', {
bgneal@820 42 'form': form,
bgneal@820 43 })
bgneal@827 44
bgneal@827 45
bgneal@827 46 def query(request):
bgneal@827 47 """Retrieves the band map entries and returns them as JSON.
bgneal@827 48
bgneal@827 49 """
bgneal@827 50 show_param = request.GET.get('show', 'all')
bgneal@827 51 if show_param not in ['all', 'active', 'inactive']:
bgneal@827 52 show_param = 'all'
bgneal@827 53
bgneal@827 54 # Do we have the results cached already?
bgneal@827 55 cache_key = 'bandmap-results-{}'.format(show_param)
bgneal@827 56 results = cache.get(cache_key)
bgneal@827 57 if results:
bgneal@827 58 return HttpResponse(results, content_type='application/json')
bgneal@827 59
bgneal@827 60 # Generate results
bgneal@827 61 qs = BandEntry.objects.filter(is_approved=True)
bgneal@827 62 if show_param == 'active':
bgneal@827 63 qs = qs.filter(is_active=True)
bgneal@827 64 elif show_param == 'inactive':
bgneal@827 65 qs = qs.filter(is_active=False)
bgneal@827 66
bgneal@827 67 bands = []
bgneal@827 68 for band in qs.iterator():
bgneal@831 69 note = render_to_string('bandmap/balloon.html', {'band': band})
bgneal@831 70 note = note.strip().replace('\n', '')
bgneal@827 71 bands.append({
bgneal@827 72 'name': band.name,
bgneal@827 73 'lat': band.lat,
bgneal@827 74 'lon': band.lon,
bgneal@830 75 'is_active': band.is_active,
bgneal@831 76 'note': note,
bgneal@827 77 })
bgneal@827 78 results = json.dumps(bands)
bgneal@827 79
bgneal@827 80 # Store in cache
bgneal@827 81 cache.set(cache_key, results, 300)
bgneal@827 82
bgneal@827 83 return HttpResponse(results, content_type='application/json')