from rest_framework import generics from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.exceptions import PermissionDenied from .models import Factory from .serializers import FactorySerializer, FactoryListSerializer class FactoryListView(generics.ListCreateAPIView): """ 工厂列表和创建视图 """ queryset = Factory.objects.all() permission_classes = [IsAuthenticated] def get_serializer_class(self): if self.request.method == 'GET': return FactoryListSerializer return FactorySerializer def perform_create(self, serializer): # 只有管理员可以创建工厂 if self.request.user.role != 'admin': raise PermissionDenied("只有管理员可以创建工厂") serializer.save() class FactoryDetailView(generics.RetrieveUpdateDestroyAPIView): """ 工厂详情视图 """ queryset = Factory.objects.all() serializer_class = FactorySerializer permission_classes = [IsAuthenticated] def perform_update(self, serializer): # 普通用户只能修改自己所属工厂的信息 if (self.request.user.role != 'admin' and self.request.user.factory_id != self.get_object().id): raise PermissionDenied("无权修改其他工厂信息") serializer.save() def perform_destroy(self, instance): # 只有管理员可以删除工厂 if self.request.user.role != 'admin': raise PermissionDenied("只有管理员可以删除工厂") instance.delete() @api_view(['GET']) @permission_classes([IsAuthenticated]) def factory_list_simple(request): """ 简化的工厂列表,用于下拉选择 """ factories = Factory.objects.all() serializer = FactoryListSerializer(factories, many=True) return Response(serializer.data)