增加记录owntracks经纬度信息功能🤓🤓

sh_branch
liangliang 8 years ago
parent d8eb0f2dd5
commit a10e227fca

@ -19,6 +19,7 @@ from accounts.admin import *
from oauth.admin import *
from servermanager.admin import *
from comments.admin import *
from owntracks.admin import *
class DjangoBlogAdminSite(AdminSite):
@ -57,3 +58,5 @@ admin_site.register(BlogUser, BlogUserAdmin)
admin_site.register(Comment, CommentAdmin)
admin_site.register(OAuthUser, OAuthUserAdmin)
admin_site.register(OwnTrackLog, OwnTrackLogsAdmin)

@ -47,6 +47,7 @@ INSTALLED_APPS = [
'comments',
'oauth',
'servermanager',
'owntracks',
'compressor'
]

@ -46,5 +46,6 @@ urlpatterns = [
name='django.contrib.sitemaps.views.sitemap'),
url(r'^feed/$', DjangoBlogFeed()),
url(r'^search', include('haystack.urls'), name='search'),
url(r'', include('servermanager.urls', namespace='servermanager'))
url(r'', include('servermanager.urls', namespace='servermanager')),
url(r'', include('owntracks.urls', namespace='owntracks'))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

@ -8,7 +8,6 @@ from django.utils.timezone import now
# Create your models here.
class BlogUser(AbstractUser):
nickname = models.CharField('昵称', max_length=50, blank=True)
nickname = models.CharField('昵称', max_length=100, blank=True)
mugshot = models.ImageField('头像', upload_to='upload/mugshots', blank=True)
created_time = models.DateTimeField('创建时间', default=now)

@ -0,0 +1,8 @@
from django.contrib import admin
# Register your models here.
from .models import OwnTrackLog
class OwnTrackLogsAdmin(admin.ModelAdmin):
pass

@ -0,0 +1,5 @@
from django.apps import AppConfig
class OwntracksConfig(AppConfig):
name = 'owntracks'

@ -0,0 +1,20 @@
from django.db import models
from django.utils.timezone import now
# Create your models here.
class OwnTrackLog(models.Model):
tid = models.CharField(max_length=100, null=False, verbose_name='用户')
lat = models.FloatField(verbose_name='纬度')
lon = models.FloatField(verbose_name='经度')
created_time = models.DateTimeField('创建时间', default=now)
def __str__(self):
return self.tid
class Meta:
ordering = ['created_time']
verbose_name = "OwnTrackLogs"
verbose_name_plural = verbose_name
get_latest_by = 'created_time'

@ -0,0 +1,27 @@
from django.test import Client, RequestFactory, TestCase
from .models import OwnTrackLog
from accounts.models import BlogUser
import json
# Create your tests here.
class OwnTrackLogTest(TestCase):
def setUp(self):
self.client = Client()
self.factory = RequestFactory()
def test_own_track_log(self):
user = BlogUser.objects.create_superuser(email="liangliangyy1@gmail.com",
username="liangliangyy1", password="liangliangyy1")
self.client.login(username='liangliangyy1', password='liangliangyy1')
s = OwnTrackLog()
s.tid = 12
s.lon = 123.234
s.lat = 34.234
s.save()
rsp = self.client.get('/owntracks/show_maps')
self.assertEqual(rsp.status_code, 200)
rsp = self.client.get('/owntracks/get_datas')
self.assertEqual(rsp.status_code, 200)

@ -0,0 +1,26 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.net/
@software: PyCharm
@file: urls.py
@time: 2018/2/25 下午3:04
"""
from django.urls import path
from . import views
app_name = "owntracks"
urlpatterns = [
path('owntracks/logtracks', views.manage_owntrack_log),
path('owntracks/show_maps', views.show_maps),
path('owntracks/get_datas', views.get_datas)
]
# http://home.lylinux.net:2213/owntracks/logtracks

@ -0,0 +1,59 @@
from django.shortcuts import render
# Create your views here.
import json
from itertools import groupby
from django.http import HttpResponse
from .models import OwnTrackLog
from DjangoBlog.utils import logger
from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def manage_owntrack_log(request):
try:
s = json.loads(request.body)
tid = s['tid']
lat = s['lat']
lon = s['lon']
logger.info('tid:{tid}.lat:{lat}.lon:{lon}'.format(tid=tid, lat=lat, lon=lon))
if tid and lat and lon:
m = OwnTrackLog()
m.tid = tid
m.lat = lat
m.lon = lon
m.save()
return HttpResponse('ok')
else:
return HttpResponse('data error')
except Exception as e:
logger.warn(e)
return HttpResponse('error')
@login_required
def show_maps(request):
return render(request, 'owntracks/show_maps.html')
@login_required
def get_datas(request):
models = OwnTrackLog.objects.all()
result = list()
if models and len(models):
for tid, item in groupby(sorted(models, key=lambda k: k.tid), key=lambda k: k.tid):
d = dict()
d["name"] = tid
paths = list()
for i in item:
path = list()
path.append(i.lon)
path.append(i.lat)
paths.append(path)
d["path"] = paths
result.append(d)
return JsonResponse(result, safe=False)

@ -2,19 +2,19 @@ appdirs==1.4.3
bottle==0.12.13
certifi==2018.1.18
chardet==3.0.4
coverage==4.5
coverage==4.5.1
Django==2.0.2
django-appconf==1.0.2
django-autoslug==1.9.3
django-compressor==2.2
django-debug-toolbar==1.9.1
django-haystack==2.6.1
django-haystack==2.7.0
django-ipware==2.0.1
django-pagedown==1.0.4
django-uuslug==1.1.8
idna==2.6
jieba==0.39
jsonpickle==0.9.5
jsonpickle==0.9.6
markdown2==2.3.5
mistune==0.8.3
olefile==0.45.1
@ -25,7 +25,7 @@ PyMySQL==0.8.0
pyparsing==2.2.0
python-memcached==1.59
python-slugify==1.2.4
pytz==2017.3
pytz==2018.3
rcssmin==1.0.6
requests==2.18.4
rjsmin==1.0.12

@ -5,3 +5,6 @@ from .models import commands
class CommandsAdmin(admin.ModelAdmin):
list_display = ('title', 'command', 'describe')
admin.site.register(commands, CommandsAdmin)

@ -0,0 +1,135 @@
<!doctype html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<style>
html,
body,
#container {
width: 100%;
height: 100%;
margin: 0px;
}
#loadingTip {
position: absolute;
z-index: 9999;
top: 0;
left: 0;
padding: 3px 10px;
background: red;
color: #fff;
font-size: 14px;
}
</style>
<title>快速入门</title>
</head>
<body>
<div id="container"></div>
<script type="text/javascript" src='//webapi.amap.com/maps?v=1.4.4&key=9c89950bdfbcecd46f814309384655cd'></script>
<!-- UI组件库 1.0 -->
<script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
<script type="text/javascript">
//创建地图
var map = new AMap.Map('container', {
zoom: 4
});
AMapUI.load(['ui/misc/PathSimplifier', 'lib/$'], function (PathSimplifier, $) {
if (!PathSimplifier.supportCanvas) {
alert('当前环境不支持 Canvas');
return;
}
//just some colors
var colors = [
"#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00",
"#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707",
"#651067", "#329262", "#5574a6", "#3b3eac"
];
var pathSimplifierIns = new PathSimplifier({
zIndex: 100,
//autoSetFitView:false,
map: map, //所属的地图实例
getPath: function (pathData, pathIndex) {
return pathData.path;
},
getHoverTitle: function (pathData, pathIndex, pointIndex) {
if (pointIndex >= 0) {
//point
return pathData.name + ',点:' + pointIndex + '/' + pathData.path.length;
}
return pathData.name + ',点数量' + pathData.path.length;
},
renderOptions: {
pathLineStyle: {
dirArrowStyle: true
},
getPathStyle: function (pathItem, zoom) {
var color = colors[pathItem.pathIndex % colors.length],
lineWidth = Math.round(4 * Math.pow(1.1, zoom - 3));
return {
pathLineStyle: {
strokeStyle: color,
lineWidth: lineWidth
},
pathLineSelectedStyle: {
lineWidth: lineWidth + 2
},
pathNavigatorStyle: {
fillStyle: color
}
};
}
}
});
window.pathSimplifierIns = pathSimplifierIns;
$('<div id="loadingTip">加载数据,请稍候...</div>').appendTo(document.body);
$.getJSON('/owntracks/get_datas', function (d) {
if (!d || !d.length) {
$("#loadingTip").text("没有数据...")
return;
}
$('#loadingTip').remove();
pathSimplifierIns.setData(d);
//initRoutesContainer(d);
function onload() {
pathSimplifierIns.renderLater();
}
function onerror(e) {
alert('图片加载失败!');
}
d.forEach(function (item, index) {
var navg1 = pathSimplifierIns.createPathNavigator(index, {
loop: true,
speed: 1000000,
});
navg1.start();
})
});
});
</script>
</body>
</html>

@ -2,19 +2,19 @@ appdirs==1.4.3
bottle==0.12.13
certifi==2018.1.18
chardet==3.0.4
coverage==4.5
coverage==4.5.1
Django==2.0.2
django-appconf==1.0.2
django-autoslug==1.9.3
django-compressor==2.2
django-debug-toolbar==1.9.1
django-haystack==2.6.1
django-haystack==2.7.0
django-ipware==2.0.1
django-pagedown==1.0.4
django-uuslug==1.1.8
idna==2.6
jieba==0.39
jsonpickle==0.9.5
jsonpickle==0.9.6
markdown2==2.3.5
mistune==0.8.3
olefile==0.45.1
@ -24,7 +24,7 @@ Pygments==2.2.0
PyMySQL==0.8.0
pyparsing==2.2.0
python-slugify==1.2.4
pytz==2017.3
pytz==2018.3
rcssmin==1.0.6
requests==2.18.4
rjsmin==1.0.12
@ -35,4 +35,4 @@ urllib3==1.22
webencodings==0.5.1
WeRoBot==1.2.0
Whoosh==2.7.4
xmltodict==0.11.0
xmltodict==0.11.0

@ -48,6 +48,7 @@ INSTALLED_APPS = [
'comments',
'oauth',
'servermanager',
'owntracks',
'compressor'
]

Loading…
Cancel
Save