views.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from django.shortcuts import render
  2. # Create your views here.
  3. import json
  4. import datetime
  5. import itertools
  6. from itertools import groupby
  7. from django.http import HttpResponse
  8. from .models import OwnTrackLog
  9. import logging
  10. from django.shortcuts import render
  11. from django.http import JsonResponse
  12. from django.contrib.auth.decorators import login_required
  13. from django.views.decorators.csrf import csrf_exempt
  14. import requests
  15. logger = logging.getLogger(__name__)
  16. @csrf_exempt
  17. def manage_owntrack_log(request):
  18. try:
  19. s = json.loads(request.read().decode('utf-8'))
  20. tid = s['tid']
  21. lat = s['lat']
  22. lon = s['lon']
  23. logger.info('tid:{tid}.lat:{lat}.lon:{lon}'.format(tid=tid, lat=lat, lon=lon))
  24. if tid and lat and lon:
  25. m = OwnTrackLog()
  26. m.tid = tid
  27. m.lat = lat
  28. m.lon = lon
  29. m.save()
  30. return HttpResponse('ok')
  31. else:
  32. return HttpResponse('data error')
  33. except Exception as e:
  34. logger.error(e)
  35. return HttpResponse('error')
  36. @login_required
  37. def show_maps(request):
  38. if request.user.is_superuser:
  39. defaultdate = str(datetime.datetime.now().date())
  40. date = request.GET.get('date', defaultdate)
  41. context = {
  42. 'date': date
  43. }
  44. return render(request, 'owntracks/show_maps.html', context)
  45. else:
  46. from django.http import HttpResponseForbidden
  47. return HttpResponseForbidden()
  48. @login_required
  49. def show_log_dates(request):
  50. dates = OwnTrackLog.objects.values_list('created_time', flat=True)
  51. results = list(sorted(set(map(lambda x: x.strftime('%Y-%m-%d'), dates))))
  52. context = {
  53. 'results': results
  54. }
  55. return render(request, 'owntracks/show_log_dates.html', context)
  56. def convert_to_amap(locations):
  57. convert_result = []
  58. it = iter(locations)
  59. item = list(itertools.islice(it, 30))
  60. while item:
  61. datas = ';'.join(set(map(lambda x: str(x.lon) + ',' + str(x.lat), item)))
  62. key = '8440a376dfc9743d8924bf0ad141f28e'
  63. api = 'http://restapi.amap.com/v3/assistant/coordinate/convert'
  64. query = {
  65. 'key': key,
  66. 'locations': datas,
  67. 'coordsys': 'gps'
  68. }
  69. rsp = requests.get(url=api, params=query)
  70. result = json.loads(rsp.text)
  71. convert_result.append(result['locations'])
  72. item = list(itertools.islice(it, 30))
  73. return ";".join(convert_result)
  74. @login_required
  75. def get_datas(request):
  76. import django.utils.timezone
  77. from django.utils.timezone import utc
  78. now = django.utils.timezone.now().replace(tzinfo=utc)
  79. querydate = django.utils.timezone.datetime(now.year, now.month, now.day, 0, 0, 0)
  80. if request.GET.get('date', None):
  81. date = list(map(lambda x: int(x), request.GET.get('date').split('-')))
  82. querydate = django.utils.timezone.datetime(date[0], date[1], date[2], 0, 0, 0)
  83. nextdate = querydate + datetime.timedelta(days=1)
  84. models = OwnTrackLog.objects.filter(created_time__range=(querydate, nextdate))
  85. result = list()
  86. if models and len(models):
  87. for tid, item in groupby(sorted(models, key=lambda k: k.tid), key=lambda k: k.tid):
  88. d = dict()
  89. d["name"] = tid
  90. paths = list()
  91. locations = convert_to_amap(sorted(item, key=lambda x: x.created_time))
  92. for i in locations.split(';'):
  93. paths.append(i.split(','))
  94. d["path"] = paths
  95. result.append(d)
  96. return JsonResponse(result, safe=False)