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, 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 from .serializers import LocationSerializer from django.http import JsonResponse class LocationViewSet(viewsets.ModelViewSet): queryset=Location.objects.all() serializer_class=LocationSerializer filter_fields=["prefecture", "location_name"] class Location_lineViewSet(viewsets.ModelViewSet): queryset=Location_line.objects.all() serializer_class=Location_lineSerializer class Location_polygonViewSet(viewsets.ModelViewSet): queryset=Location_polygon.objects.all() serializer_class=Location_polygonSerializer class Jpn_Main_PerfViewSet(viewsets.ModelViewSet): queryset=JpnAdminMainPerf.objects.all() serializer_class=JPN_main_perfSerializer filter_fields = ["adm1_ja"] class Jpn_PerfViewSet(viewsets.ModelViewSet): queryset=JpnAdminPerf.objects.all() serializer_class=JPN_perfSerializer 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) 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) def SubInPerf(request): prefecture = request.GET.get('perf') perf_geom = JpnAdminMainPerf.objects.get(id=prefecture) sub = JpnAdminPerf.objects.filter(geom__within=perf_geom.geom) serializer = JPN_perfSerializer(sub, many=True) return JsonResponse(serializer.data, safe=False) 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 #sub = JpnAdminPerf.objects.filter(geom__within=perf_geom.geom) serializer = JPN_sub_perSerializer(sub, many=True) return JsonResponse(serializer.data, safe=False) def ExtentForMainPerf(request): perf_id = request.GET.get('perf') perf = JpnAdminMainPerf.objects.get(id=perf_id) ext = perf.geom.extent # iata = serializers.serialize("json",ext) return JsonResponse(ext, safe=False) def ExtentForSubPerf(request): sub_perf_id = request.GET.get('sub_perf') sub_perf = JpnSubPerf.objects.get(id=sub_perf_id) ext = sub_perf.geom.extent # 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