# 温度、湿度api

This commit is contained in:
xianfuxing 2019-08-28 22:04:07 +08:00
parent 7210ab5e5b
commit b824f8e6c3
4 changed files with 59 additions and 5 deletions

View File

@ -1,5 +1,5 @@
from rest_framework import serializers
from mosquito.models import Mosquito, MosqPost
from mosquito.models import Mosquito, MosqPost, DeviceTempLog
from smart.api.serializers import SmartPushListSerializer
@ -32,3 +32,10 @@ class MosqPostListSerializer(serializers.ModelSerializer):
def get_region(self, obj):
return obj.mosq.region
class DeviceTempLogSerializer(serializers.ModelSerializer):
class Meta:
model = DeviceTempLog
fields = '__all__'

View File

@ -1,9 +1,14 @@
from django.urls import path, re_path
from .views import MosquitoListAPIView, MosquitoPostListAPIView
from .views import (
MosquitoListAPIView,
MosquitoPostListAPIView,
DeviceTempLogListAPIView,
)
app_name = 'mosq-api'
urlpatterns = [
path('', MosquitoListAPIView.as_view(), name='list'),
path('post/', MosquitoPostListAPIView.as_view(), name='post'),
path('temp/', DeviceTempLogListAPIView.as_view(), name='temp-hum'),
]

View File

@ -3,13 +3,28 @@ from rest_framework.generics import (
RetrieveAPIView,
CreateAPIView
)
from rest_framework import filters
from rest_framework.pagination import PageNumberPagination
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter
from django.db.models import Q
from ..models import Mosquito, MosqPost
from counter.mixins.role import RoleMixin, DeviceListMixin
from ..models import Mosquito, MosqPost, DeviceTempLog
from .pagination import PostLimitOffsetPagination, PostPageNumberPagination
from .serializers import MosqListSerializer, MosqPostListSerializer
from .serializers import (
MosqListSerializer,
MosqPostListSerializer,
DeviceTempLogSerializer,
)
class DeviceLogPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'limit'
page_query_param = 'page'
max_page_size = 1000
class MosquitoListAPIView(ListAPIView):
@ -47,3 +62,29 @@ class MosquitoPostListAPIView(ListAPIView):
Q(mosq__region=query)
).distinct()
return queryset_list
class DeviceTempLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
serializer_class = DeviceTempLogSerializer
permission_classes = [IsAuthenticated]
filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
pagination_class = DeviceLogPagination
search_fields = ['device_id']
filterset_fields = ['device_id']
ordering_fields = ['-last_time']
def get_queryset(self, *args, **kwargs):
user_roles = self.get_role()
queryset_list = DeviceTempLog.objects.get_queryset().order_by('-create_time')
if 'staff' in user_roles or 'admin' in user_roles:
device_list = self.get_device_list()
device_ids = [query.device_id for query in device_list if query.org == self.request.user.org]
queryset_list = queryset_list.filter(device_id__in=device_ids)
# device_id = self.request.GET.get('device_id')
# if device_id:
# queryset_list = queryset_list.filter(device_id__icontains=device_id)
return queryset_list

View File

@ -41,6 +41,7 @@ INSTALLED_APPS = [
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_filters',
'corsheaders',
'accounts',
'mosquito',