factory/apps/am/views.py

47 lines
1.8 KiB
Python
Executable File

from apps.am.models import Area
from apps.am.serializers import AccessCreateSerializer, AreaCreateUpdateSerializer
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
from django.db import transaction
from rest_framework.decorators import action
from rest_framework import serializers
from apps.third.clients import xxClient
from apps.third.tapis import xxapis
from rest_framework.response import Response
from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin
# Create your views here.
class AreaViewSet(CustomModelViewSet):
queryset = Area.objects.all()
create_serializer_class = AreaCreateUpdateSerializer
update_serializer_class = AreaCreateUpdateSerializer
@transaction.atomic
@action(methods=['post'], detail=True, perms_map={'post': 'area:bind_rail'},
serializer_class=serializers.Serializer)
def bind_rail(self, request, pk=None):
"""
绑定围栏
"""
data = request.data
obj = self.get_object()
third_info = obj.third_info
if 'xx_rail' in third_info:
data['uuid'] = third_info['xx_rail']['uuid']
_, res = xxClient.request(**xxapis['rail_update'], json=data)
third_info['xx_rail']['detail'] = data
obj.third_info = third_info
obj.save()
else:
_, res = xxClient.request(**xxapis['rail_create'], json=data)
rail_info = {'uuid': res, 'detail': data}
third_info['xx_rail'] = rail_info
obj.third_info = third_info
obj.save()
return Response()
class AccessViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'post': 'access:create', 'delete': 'access:delete'}
create_serializer_class = AccessCreateSerializer