views.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.conf import settings
  4. from django.core.urlresolvers import reverse_lazy
  5. from django.http import HttpResponse, JsonResponse
  6. from django.shortcuts import render, get_object_or_404
  7. from django.views.generic import CreateView, DetailView, RedirectView, ListView
  8. from .models import Panorama, ReferencePoint
  9. class PanoramaUpload(CreateView):
  10. model = Panorama
  11. fields = ('name', 'image', 'loop', 'latitude', 'longitude', 'altitude')
  12. template_name = "panorama/new.html"
  13. def get_success_url(self):
  14. return reverse_lazy("panorama:gen_tiles", kwargs={"id": self.object.id})
  15. class PanoramaView(DetailView):
  16. model = Panorama
  17. template_name = "panorama/view.html"
  18. context_object_name = "panorama"
  19. def pano_json(request, pk):
  20. pano = get_object_or_404(Panorama, pk=pk)
  21. return JsonResponse(pano.to_dict())
  22. def pano_refpoints(request, pk):
  23. """Returns the reference points that are close to the given panorama, as a
  24. JSON object. Each reference point also includes information relative
  25. to the given panorama (bearing, elevation, distance).
  26. """
  27. pano = get_object_or_404(Panorama, pk=pk)
  28. refpoints = [r.to_dict_extended(pano) for r in ReferencePoint.objects.all()
  29. if r.line_distance(pano) <= settings.PANORAMA_MAX_DISTANCE]
  30. return JsonResponse(refpoints, safe=False)
  31. class PanoramaGenTiles(RedirectView):
  32. permanent = False
  33. pattern_name = "panorama:list"
  34. def get_redirect_url(self, *args, **kwargs):
  35. pano = get_object_or_404(Panorama, pk=kwargs['id'])
  36. pano.generate_tiles()
  37. return super(PanoramaGenTiles, self).get_redirect_url(*args, **kwargs)
  38. class PanoramaList(ListView):
  39. model = Panorama
  40. template_name = "panorama/list.html"
  41. context_object_name = "panoramas"