From dd946943e4559508b5a5ce1173e1f0c58c43eaab Mon Sep 17 00:00:00 2001 From: xianfuxing Date: Thu, 12 Jul 2018 17:22:23 +0800 Subject: [PATCH] # mosquito api done --- apps/mosquito/api/serializers.py | 34 +++++++++++++++++++++----------- apps/mosquito/api/urls.py | 8 ++++++++ apps/mosquito/api/views.py | 28 ++++++++++++++++++++++++++ apps/smart/api/serializers.py | 14 +++++++++++++ mosqkiller/settings.py | 1 + mosqkiller/urls.py | 3 ++- 6 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 apps/mosquito/api/urls.py create mode 100644 apps/mosquito/api/views.py create mode 100644 apps/smart/api/serializers.py diff --git a/apps/mosquito/api/serializers.py b/apps/mosquito/api/serializers.py index 6737d89..b2ab074 100644 --- a/apps/mosquito/api/serializers.py +++ b/apps/mosquito/api/serializers.py @@ -1,10 +1,22 @@ from rest_framework import serializers -from mosquito.models import MosqPost +from mosquito.models import Mosquito ,MosqPost +from smart.api.serializers import SmartListSerializer + + +class MosqListSerializer(serializers.ModelSerializer): + + class Meta: + model = Mosquito + fields = [ + 'name', + 'device_id', + 'region' + ] class MosqPostListSerializer(serializers.ModelSerializer): - smart_chip = serializers.SerializerMethodField() region = serializers.SerializerMethodField() + smarts = serializers.SerializerMethodField() class Meta: model = MosqPost @@ -12,15 +24,15 @@ class MosqPostListSerializer(serializers.ModelSerializer): 'mosq', 'led', 'energy', - 'smart_chip' - 'signal', - 'coordinate' - 'region' - 'time' + 'region', + 'smarts', + 'time', ] - def get_smart_chip(self, obj): - return obj.mosq.smart_module.device_id - def get_region(self, obj): - return obj.mosq.region \ No newline at end of file + return obj.mosq.region + + def get_smarts(self, obj): + smart_queryset = obj.mosq.smart_module.all() + smarts = SmartListSerializer(smart_queryset, many=True).data + return smarts diff --git a/apps/mosquito/api/urls.py b/apps/mosquito/api/urls.py new file mode 100644 index 0000000..c441a7d --- /dev/null +++ b/apps/mosquito/api/urls.py @@ -0,0 +1,8 @@ +from django.urls import path, re_path +from .views import MosquitoListAPIView + + +app_name = 'mosq-api' +urlpatterns = [ + path('', MosquitoListAPIView.as_view(), name='list') +] \ No newline at end of file diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py new file mode 100644 index 0000000..004feaa --- /dev/null +++ b/apps/mosquito/api/views.py @@ -0,0 +1,28 @@ +from rest_framework.generics import ( + ListAPIView, + RetrieveAPIView, + CreateAPIView +) + +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 + + +class MosquitoListAPIView(ListAPIView): + serializer_class = MosqListSerializer + filter_backends = [SearchFilter, OrderingFilter] + search_fields = ['name', 'device_id', 'region'] + + def get_queryset(self, *args, **kwargs): + queryset_list = Mosquito.objects.all() + query = self.request.GET.get('q') + if query: + queryset_list = queryset_list.filter( + Q(name__icontains=query) | + Q(device_id__icontains=query) | + Q(region__icontains=query) + ).distinct() + return queryset_list diff --git a/apps/smart/api/serializers.py b/apps/smart/api/serializers.py new file mode 100644 index 0000000..ac5700f --- /dev/null +++ b/apps/smart/api/serializers.py @@ -0,0 +1,14 @@ +from rest_framework import serializers +from smart.models import SmartModule + + +class SmartListSerializer(serializers.ModelSerializer): + + class Meta: + model = SmartModule + fields = [ + 'name', + 'desc' + 'device_id', + 'chip_id' + ] diff --git a/mosqkiller/settings.py b/mosqkiller/settings.py index 9cd82fc..2290334 100644 --- a/mosqkiller/settings.py +++ b/mosqkiller/settings.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', 'mosquito', 'smart', ] diff --git a/mosqkiller/urls.py b/mosqkiller/urls.py index 50ca491..244cd7b 100644 --- a/mosqkiller/urls.py +++ b/mosqkiller/urls.py @@ -14,8 +14,9 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('mosq_admin/', admin.site.urls), + path('api/mosq/', include('mosquito.api.urls')), ]