From 3e2ffed09cb1718f4c48a68de9053ccc0c6c5100 Mon Sep 17 00:00:00 2001 From: xianfuxing Date: Sat, 14 Jul 2018 16:14:34 +0800 Subject: [PATCH] # finish smart / mosq api --- apps/mosquito/api/serializers.py | 5 ++++- apps/mosquito/api/urls.py | 5 +++-- apps/mosquito/api/views.py | 20 ++++++++++++++++++-- apps/smart/api/serializers.py | 6 +++++- apps/smart/api/urls.py | 5 +++-- apps/smart/api/views.py | 21 +++++++++++++++++++-- mosqkiller/urls.py | 4 ++++ 7 files changed, 56 insertions(+), 10 deletions(-) diff --git a/apps/mosquito/api/serializers.py b/apps/mosquito/api/serializers.py index e0b1a34..0a5b403 100644 --- a/apps/mosquito/api/serializers.py +++ b/apps/mosquito/api/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers from mosquito.models import Mosquito, MosqPost -from smart.api.serializers import SmartListSerializer +from smart.api.serializers import SmartPushListSerializer class MosqListSerializer(serializers.ModelSerializer): @@ -15,15 +15,18 @@ class MosqListSerializer(serializers.ModelSerializer): class MosqPostListSerializer(serializers.ModelSerializer): + smart_push = SmartPushListSerializer(read_only=True) region = serializers.SerializerMethodField() class Meta: model = MosqPost fields = [ + 'id', 'mosq', 'led', 'energy', 'region', + 'smart_push', 'time', ] diff --git a/apps/mosquito/api/urls.py b/apps/mosquito/api/urls.py index c441a7d..b298350 100644 --- a/apps/mosquito/api/urls.py +++ b/apps/mosquito/api/urls.py @@ -1,8 +1,9 @@ from django.urls import path, re_path -from .views import MosquitoListAPIView +from .views import MosquitoListAPIView, MosquitoPostListAPIView app_name = 'mosq-api' urlpatterns = [ - path('', MosquitoListAPIView.as_view(), name='list') + path('', MosquitoListAPIView.as_view(), name='list'), + path('post/', MosquitoPostListAPIView.as_view(), name='post'), ] \ No newline at end of file diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index 004feaa..b3ca906 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -7,8 +7,8 @@ from rest_framework.generics import ( from rest_framework.permissions import IsAuthenticated from rest_framework.filters import SearchFilter, OrderingFilter from django.db.models import Q -from ..models import Mosquito -from .serializers import MosqListSerializer +from ..models import Mosquito, MosqPost +from .serializers import MosqListSerializer, MosqPostListSerializer class MosquitoListAPIView(ListAPIView): @@ -26,3 +26,19 @@ class MosquitoListAPIView(ListAPIView): Q(region__icontains=query) ).distinct() return queryset_list + + +class MosquitoPostListAPIView(ListAPIView): + serializer_class = MosqPostListSerializer + filter_backends = [SearchFilter, OrderingFilter] + search_fields = ['mosq__name', 'mosq__region'] + + def get_queryset(self, *args, **kwargs): + queryset_list = MosqPost.objects.all() + query = self.request.GET.get('q') + if query: + queryset_list = queryset_list.filter( + Q(mosq__name__contains=query) | + Q(mosq__region=query) + ).distinct() + return queryset_list diff --git a/apps/smart/api/serializers.py b/apps/smart/api/serializers.py index c465ce6..79b06ed 100644 --- a/apps/smart/api/serializers.py +++ b/apps/smart/api/serializers.py @@ -14,6 +14,7 @@ class SmartListSerializer(serializers.ModelSerializer): class SmartPushListSerializer(serializers.ModelSerializer): + smart = serializers.SerializerMethodField() class Meta: model = SmartPush @@ -22,4 +23,7 @@ class SmartPushListSerializer(serializers.ModelSerializer): 'signal', 'coordinate', 'time', - ] \ No newline at end of file + ] + + def get_smart(self, obj): + return obj.smart.name diff --git a/apps/smart/api/urls.py b/apps/smart/api/urls.py index 5eced2c..13a51d9 100644 --- a/apps/smart/api/urls.py +++ b/apps/smart/api/urls.py @@ -1,8 +1,9 @@ from django.urls import path -from .views import SmartListAPIView +from .views import SmartListAPIView, SmartPushListAPIView app_name = 'smart-api' urlpatterns = [ - path('', SmartListAPIView.as_view(), name='list') + path('', SmartListAPIView.as_view(), name='list'), + path('push/', SmartPushListAPIView.as_view(), name='push') ] \ No newline at end of file diff --git a/apps/smart/api/views.py b/apps/smart/api/views.py index a188d95..abacd4f 100644 --- a/apps/smart/api/views.py +++ b/apps/smart/api/views.py @@ -7,8 +7,8 @@ from rest_framework.generics import ( from rest_framework.permissions import IsAuthenticated from rest_framework.filters import SearchFilter, OrderingFilter from django.db.models import Q -from .serializers import SmartListSerializer -from ..models import SmartModule +from .serializers import SmartListSerializer, SmartPushListSerializer +from ..models import SmartModule, SmartPush class SmartListAPIView(ListAPIView): @@ -26,4 +26,21 @@ class SmartListAPIView(ListAPIView): Q(chip_id__contains=query) | Q(region__icontains=query) ).distinct() + + return queryset_list + + +class SmartPushListAPIView(ListAPIView): + serializer_class = SmartPushListSerializer + filter_backends = [SearchFilter, OrderingFilter] + search_fields = ['smart__name'] + + def get_queryset(self, *args, **kwargs): + queryset_list = SmartPush.objects.all() + query = self.request.GET.get('q') + if query: + queryset_list = queryset_list.filter( + Q(smart__name__icontains=query) + ).distinct() + return queryset_list diff --git a/mosqkiller/urls.py b/mosqkiller/urls.py index 23157fe..7af8cd1 100644 --- a/mosqkiller/urls.py +++ b/mosqkiller/urls.py @@ -21,3 +21,7 @@ urlpatterns = [ path('api/mosq/', include('mosquito.api.urls')), path('api/smart/', include('smart.api.urls')), ] + +urlpatterns += [ + path('api-auth/', include('rest_framework.urls')), +] \ No newline at end of file