diff --git a/gmap/__init__.py b/mapapp/__init__.py similarity index 100% rename from gmap/__init__.py rename to mapapp/__init__.py diff --git a/mapapp/admin.py b/mapapp/admin.py new file mode 100644 index 0000000..54c437c --- /dev/null +++ b/mapapp/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import Dot + +admin.site.register(Dot) diff --git a/gmap/apps.py b/mapapp/apps.py similarity index 77% rename from gmap/apps.py rename to mapapp/apps.py index 2122372..ae47840 100644 --- a/gmap/apps.py +++ b/mapapp/apps.py @@ -1,7 +1,5 @@ - - from django.apps import AppConfig class MapappConfig(AppConfig): - name = 'gmap' + name = 'mapapp' diff --git a/mapapp/forms.py b/mapapp/forms.py new file mode 100644 index 0000000..d96ec20 --- /dev/null +++ b/mapapp/forms.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +from django import forms +from .models import Dot + + +class DotForm(forms.ModelForm): + class Meta: + model = Dot + fields = '__all__' + widgets = { + 'title': forms.TextInput(attrs={'class': 'form-control', 'required': '', 'autofocus':''}), + 'latitude': forms.NumberInput(attrs={'class': 'form-control', 'required': ''}), + 'longitude': forms.NumberInput(attrs={'class': 'form-control', 'required': ''}) + } diff --git a/mapapp/migrations/0001_initial.py b/mapapp/migrations/0001_initial.py new file mode 100644 index 0000000..5cf2773 --- /dev/null +++ b/mapapp/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2017-01-25 16:02 +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Dot', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=127)), + ('latitude', models.FloatField()), + ('longitude', models.FloatField()), + ], + options={ + 'db_table': 'dots', + }, + ), + ] diff --git a/gmap/migrations/__init__.py b/mapapp/migrations/__init__.py similarity index 100% rename from gmap/migrations/__init__.py rename to mapapp/migrations/__init__.py diff --git a/mapapp/models.py b/mapapp/models.py new file mode 100644 index 0000000..fa8e9e5 --- /dev/null +++ b/mapapp/models.py @@ -0,0 +1,13 @@ +from django.db import models + + +class Dot(models.Model): + title = models.CharField(max_length=127) + latitude = models.FloatField() + longitude = models.FloatField() + + class Meta: + db_table = 'dots' + + def __str__(self): + return self.title diff --git a/mapapp/tests.py b/mapapp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/mapapp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/mapapp/urls.py b/mapapp/urls.py new file mode 100644 index 0000000..cbb27db --- /dev/null +++ b/mapapp/urls.py @@ -0,0 +1,16 @@ +# -*- coding:utf-8 -*- +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^$', views.home, name='home'), + url(r'^options$', views.options, name='options'), + url(r'^options/add$', views.dot, name='add_dot'), + url(r'^options/(?P\d+)/edit$', views.dot, name='edit_dot'), + url(r'^options/(?P\d+)/remove$', views.remove, name='remove_dot'), + url(r'^get_dots$', views.get_dots, name='get_dots'), + + url(r'^modal_add_dot$', views.modal_add_dot, name='modal_add_dot') +] diff --git a/mapapp/views.py b/mapapp/views.py new file mode 100644 index 0000000..bee92e0 --- /dev/null +++ b/mapapp/views.py @@ -0,0 +1,98 @@ +from django.contrib import messages +from django.contrib.auth.decorators import login_required, permission_required +from django.contrib.gis.shortcuts import render_to_text +from django.core.exceptions import PermissionDenied +from django.http import HttpResponse +from django.shortcuts import render, redirect +from django.core.serializers import serialize +from .models import Dot +from .forms import DotForm +from mydefs import pag_mn + + +@login_required +def home(request): + dots = Dot.objects.all() + return render(request, 'maps/ya_index.html', { + 'dots': dots + }) + + +@login_required +def options(request): + dots = Dot.objects.all() + dots = pag_mn(request, dots) + return render(request, 'maps/options.html', { + 'dots': dots + }) + + +@login_required +def dot(request, did=0): + try: + if did == 0: + dot = Dot() + if not request.user.has_perm('mapapp.add_dot'): + raise PermissionDenied + else: + if not request.user.has_perm('mapapp.change_dot'): + raise PermissionDenied + dot = Dot.objects.get(id=did) + + if request.method == 'POST': + frm = DotForm(request.POST, instance=dot) + if frm.is_valid(): + frm.save() + messages.success(request, 'Точка топологии сохранена') + else: + messages.error(request, 'ошибки в форме') + else: + frm = DotForm(instance=dot) + + return render(request, 'maps/dot.html', { + 'dot': dot, + 'form': frm + }) + + except Dot.DoesNotExist: + messages.error(request, 'Эта точка топологии не существует') + return redirect('mapapp:options') + + +@login_required +@permission_required('mapapp.delete_dot') +def remove(request, did): + try: + dot = Dot.objects.get(id=did) + title = dot.title + dot.delete() + messages.success(request, "Точка топологии '%s' успешно удалена" % title) + except Dot.DoesNotExist: + messages.error(request, 'Эта точка топологии не существует') + return redirect('mapapp:options') + + +def get_dots(request): + dots = Dot.objects.all() + return HttpResponse(serialize('json', dots, ensure_ascii=False), content_type='application/json') + + +@login_required +@permission_required('mapapp.add_dot') +def modal_add_dot(request): + if request.method == 'POST': + coords = request.POST.get('coords') + title = request.POST.get('title') + lat, lon = coords.split(',') + print(lat, lon) + Dot.objects.create( + title=title, + latitude=float(lat), + longitude=float(lon) + ) + return redirect('mapapp:home') + else: + coords = request.GET.get('coords') + return render_to_text('maps/modal_add_dot.html', { + 'coords': coords + }, request=request)