mat/backend/apps/factory/views.py

59 lines
1.9 KiB
Python

from rest_framework import generics, status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
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 PermissionError("只有管理员可以创建工厂")
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 PermissionError("无权修改其他工厂信息")
serializer.save()
def perform_destroy(self, instance):
# 只有管理员可以删除工厂
if self.request.user.role != 'admin':
raise PermissionError("只有管理员可以删除工厂")
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)