diff --git a/apps/counter/api/mobile/urls.py b/apps/counter/api/mobile/urls.py index c7679d7..756b707 100644 --- a/apps/counter/api/mobile/urls.py +++ b/apps/counter/api/mobile/urls.py @@ -1,10 +1,11 @@ from django.urls import path from .views import ( - DeviceInfoMobileListAPIView + DeviceInfoMobileViewSet ) app_name = 'counter-mobile-api' urlpatterns = [ - path('device/', DeviceInfoMobileListAPIView.as_view(), name='logs'), -] \ No newline at end of file + path('device/', DeviceInfoMobileViewSet.as_view({'get': 'list'}), name='device-mobile-list'), + path('device//', DeviceInfoMobileViewSet.as_view({'get': 'retrieve'}), name='device-mobile-detail'), +] diff --git a/apps/counter/api/mobile/views.py b/apps/counter/api/mobile/views.py index 1bf365d..1f5923b 100644 --- a/apps/counter/api/mobile/views.py +++ b/apps/counter/api/mobile/views.py @@ -3,7 +3,8 @@ from rest_framework.filters import ( SearchFilter, OrderingFilter ) -from rest_framework.generics import ListAPIView +from rest_framework.generics import mixins +from rest_framework.viewsets import GenericViewSet from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @@ -13,7 +14,10 @@ from utils.pagination import DeviceInfoMobilePagination from ...mixins.role import RoleMixin -class DeviceInfoMobileListAPIView(ListAPIView, RoleMixin): +class DeviceInfoMobileViewSet(mixins.ListModelMixin, + mixins.RetrieveModelMixin, + RoleMixin, + GenericViewSet): serializer_class = DeviceInfoMobileSerializer permission_classes = [IsAuthenticated] filter_backends = [SearchFilter, OrderingFilter] @@ -33,6 +37,11 @@ class DeviceInfoMobileListAPIView(ListAPIView, RoleMixin): } return Response(response_data, status=status.HTTP_200_OK) + def retrieve(self, request, *args, **kwargs): + instance = self.get_object() + serializer = self.get_serializer(instance) + return Response({"code": 0, "data": serializer.data, "message": "获取成功"}) + def get_queryset(self, *args, **kwargs): user_roles = self.get_role() queryset = DeviceInfo.objects.get_queryset().order_by('-last_offline_time') @@ -52,3 +61,9 @@ class DeviceInfoMobileListAPIView(ListAPIView, RoleMixin): queryset = queryset.filter(online=int(device_status)) return queryset + def get_object(self): + queryset = self.get_queryset() + filter_kwargs = {'device_id': self.kwargs['device_id']} + obj = queryset.filter(**filter_kwargs).first() + self.check_object_permissions(self.request, obj) + return obj