update
This commit is contained in:
@ -48,6 +48,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.gis',
|
||||
'rest_framework',
|
||||
'rest_framework_gis',
|
||||
'knox',
|
||||
'leaflet',
|
||||
'leaflet_admin_list',
|
||||
'rog.apps.RogConfig',
|
||||
@ -168,5 +169,6 @@ LEAFLET_CONFIG = {
|
||||
}
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
|
||||
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
|
||||
'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication', ),
|
||||
}
|
||||
@ -20,6 +20,7 @@ from django.conf.urls.static import static
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('auth/', include('knox.urls')),
|
||||
path('api/', include("rog.urls")),
|
||||
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
||||
|
||||
@ -63,3 +63,4 @@ typing_extensions==4.0.0
|
||||
urllib3==1.26.7
|
||||
django-extra-fields==3.0.2
|
||||
django-phonenumber-field==6.1.0
|
||||
django-rest-knox==4.2.0
|
||||
|
||||
@ -18,6 +18,7 @@ from .mapping import location_mapping, location_line_mapping, location_polygon_m
|
||||
from .choices import LAYER_CHOICES
|
||||
from django.contrib.gis.utils import LayerMapping
|
||||
from django.apps import apps
|
||||
from django.db import transaction
|
||||
|
||||
import csv
|
||||
import codecs
|
||||
@ -369,13 +370,35 @@ def remove_bom_inplace(path):
|
||||
|
||||
|
||||
|
||||
@receiver(pre_save, sender=Location)
|
||||
def location_presave(sender, instance, *args, **kwargs):
|
||||
#print("------############------------", instance.location_id)
|
||||
Location.objects.filter(location_id = instance.location_id).delete()
|
||||
|
||||
|
||||
@receiver(pre_save, sender=Location_line)
|
||||
def location_presave(sender, instance, *args, **kwargs):
|
||||
Location_line.objects.filter(location_id = instance.location_id).delete()
|
||||
|
||||
@receiver(pre_save, sender=Location_polygon)
|
||||
def location_presave(sender, instance, *args, **kwargs):
|
||||
Location_polygon.objects.filter(location_id = instance.location_id).delete()
|
||||
|
||||
|
||||
|
||||
@receiver(pre_save, sender=ShapeLayers)
|
||||
def my_callback(sender, instance, *args, **kwargs):
|
||||
|
||||
instance.table_name = getTableForModel(instance.layerof)
|
||||
|
||||
|
||||
def deletePrevious(mdl, fields):
|
||||
with transaction.atomic():
|
||||
mdl.objects.filter(location_id = int(fields[0])).delete();
|
||||
|
||||
|
||||
@receiver(post_save, sender=ShapeLayers)
|
||||
def publish_date(sender, instance, created, **kwargs):
|
||||
def publish_data(sender, instance, created, **kwargs):
|
||||
file = instance.file.path
|
||||
file_format = os.path.basename(file).split('.')[-1]
|
||||
file_name = os.path.basename(file).split('.')[0]
|
||||
@ -436,6 +459,8 @@ def updateLocation(mdl, fields):
|
||||
print(f"Updating {fields[0]} - {fields[1]}")
|
||||
print(mdl.objects.filter(location_id = int(fields[0])))
|
||||
print("-------")
|
||||
|
||||
with transaction.atomic():
|
||||
mdl.objects.filter(location_id = int(fields[0])).update(
|
||||
location_name = fields[1] if len(fields) > 1 else '',
|
||||
category = fields[2] if len(fields) > 1 else '',
|
||||
@ -465,6 +490,7 @@ def updateLineTable(mdl, fields):
|
||||
print(f"Updating {fields[0]} - {fields[1]}")
|
||||
print(mdl.objects.filter(location_id = int(fields[0])))
|
||||
print("-------")
|
||||
with transaction.atomic():
|
||||
mdl.objects.filter(location_id = int(fields[0])).update(
|
||||
location_name= fields[1] if len(fields) > 1 else '',
|
||||
category=fields[2] if len(fields) > 2 else '',
|
||||
@ -491,6 +517,7 @@ def updateLineTable(mdl, fields):
|
||||
|
||||
def updatePolygonTable(mdl, fields):
|
||||
#print(f"Updated {fields[0]} - {fields[1]}")
|
||||
with transaction.atomic():
|
||||
mdl.objects.filter(location_id = fields[0]).update(
|
||||
location_name= fields[1] if len(fields) > 1 else '',
|
||||
category=fields[2] if len(fields) > 2 else '',
|
||||
|
||||
@ -4,6 +4,15 @@ from sqlalchemy.sql.functions import mode
|
||||
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf
|
||||
from drf_extra_fields.fields import Base64ImageField
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth import authenticate
|
||||
|
||||
|
||||
class LocationCatSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model=Location
|
||||
fields=['category',]
|
||||
|
||||
|
||||
class LocationSerializer(GeoFeatureModelSerializer):
|
||||
class Meta:
|
||||
@ -40,3 +49,33 @@ class JPN_perfSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model=JpnAdminPerf
|
||||
fields=['id','et_id', 'et_right', 'et_left', 'adm2_l', 'adm1_l', 'adm0_l', 'adm0_r', 'adm1_r', 'adm2_r', 'admlevel']
|
||||
|
||||
|
||||
|
||||
class CreateUserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('id', 'username', 'password')
|
||||
extra_kwargs = {'password': {'write_only': True}}
|
||||
|
||||
def create(self, validated_data):
|
||||
user = User.objects.create_user(validated_data['username'],
|
||||
None,
|
||||
validated_data['password'])
|
||||
return user
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('id', 'username')
|
||||
|
||||
|
||||
class LoginUserSerializer(serializers.Serializer):
|
||||
username = serializers.CharField()
|
||||
password = serializers.CharField()
|
||||
|
||||
def validate(self, data):
|
||||
user = authenticate(**data)
|
||||
if user and user.is_active:
|
||||
return user
|
||||
raise serializers.ValidationError("Invalid Details.")
|
||||
@ -1,7 +1,8 @@
|
||||
from rest_framework import urlpatterns
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, Jpn_PerfViewSet, LocationsInPerf, SubInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf
|
||||
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, Jpn_PerfViewSet, LocationsInPerf, SubInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI
|
||||
from django.urls import path, include
|
||||
from knox import views as knox_views
|
||||
|
||||
|
||||
router = DefaultRouter()
|
||||
@ -21,4 +22,9 @@ urlpatterns += [
|
||||
path('subperfinmain/', SubPerfInMainPerf, name="sub_perf"),
|
||||
path('perfext/', ExtentForSubPerf, name="sub_perf_ext"),
|
||||
path('mainperfext/', ExtentForMainPerf, name="main_perf_ext"),
|
||||
path('cats/', CatView, name='cats'),
|
||||
path('register/', RegistrationAPI.as_view()),
|
||||
path('login/', LoginAPI.as_view()),
|
||||
path('user/', UserAPI.as_view()),
|
||||
path('logout/', knox_views.LogoutView.as_view(), name='knox_logout'),
|
||||
]
|
||||
55
rog/views.py
55
rog/views.py
@ -1,8 +1,10 @@
|
||||
from django.core.serializers import serialize
|
||||
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf
|
||||
from rest_framework import viewsets
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, JPN_perfSerializer, JPN_sub_perSerializer
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, JPN_perfSerializer, JPN_sub_perSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer
|
||||
from knox.models import AuthToken
|
||||
|
||||
from rest_framework import viewsets, permissions, generics
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.parsers import JSONParser, MultiPartParser
|
||||
@ -39,15 +41,25 @@ class Jpn_PerfViewSet(viewsets.ModelViewSet):
|
||||
|
||||
def LocationsInPerf(request):
|
||||
perfecture = request.GET.get('perf')
|
||||
cat = request.GET.get('cat')
|
||||
perf_geom = JpnAdminMainPerf.objects.get(id=perfecture)
|
||||
|
||||
if(cat):
|
||||
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
||||
else:
|
||||
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
||||
|
||||
serializer = LocationSerializer(locs, many=True)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
#return JsonResponse({})
|
||||
|
||||
def LocationsInSubPerf(request):
|
||||
subperfecture = request.GET.get('subperf')
|
||||
cat = request.GET.get('cat')
|
||||
perf_geom = JpnSubPerf.objects.get(id=subperfecture)
|
||||
|
||||
if(cat):
|
||||
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
||||
else:
|
||||
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
||||
serializer = LocationSerializer(locs, many=True)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
@ -65,7 +77,7 @@ def SubPerfInMainPerf(request):
|
||||
prefecture = request.GET.get('perf')
|
||||
perf_geom = JpnAdminMainPerf.objects.get(id=prefecture)
|
||||
sub = JpnSubPerf.objects.filter(geom__within=perf_geom.geom)
|
||||
serializer = JPN_sub_perSerializer
|
||||
#serializer = JPN_sub_perSerializer
|
||||
#sub = JpnAdminPerf.objects.filter(geom__within=perf_geom.geom)
|
||||
serializer = JPN_sub_perSerializer(sub, many=True)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
@ -85,3 +97,40 @@ def ExtentForSubPerf(request):
|
||||
# iata = serializers.serialize("json",ext)
|
||||
return JsonResponse(ext, safe=False)
|
||||
|
||||
|
||||
def CatView(request):
|
||||
c = Location.objects.values('category').distinct()
|
||||
serializer = LocationCatSerializer(c, many=True)
|
||||
return JsonResponse(serializer.data, safe=False)
|
||||
|
||||
|
||||
class RegistrationAPI(generics.GenericAPIView):
|
||||
serializer_class = CreateUserSerializer
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = serializer.save()
|
||||
return Response({
|
||||
"user": UserSerializer(user, context=self.get_serializer_context()).data,
|
||||
"token": AuthToken.objects.create(user)[1]
|
||||
})
|
||||
|
||||
class LoginAPI(generics.GenericAPIView):
|
||||
serializer_class = LoginUserSerializer
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = serializer.validated_data
|
||||
return Response({
|
||||
"user": UserSerializer(user, context=self.get_serializer_context()).data,
|
||||
"token": AuthToken.objects.create(user)[1]
|
||||
})
|
||||
|
||||
class UserAPI(generics.RetrieveAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated, ]
|
||||
serializer_class = UserSerializer
|
||||
|
||||
def get_object(self):
|
||||
return self.request.user
|
||||
Reference in New Issue
Block a user