Files
chunyu_project/tool/views/compression_history_view.py
T
2026-08-05 23:59:15 +08:00

109 lines
3.5 KiB
Python

from django.http import JsonResponse
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.decorators import permission_classes
from rest_framework.permissions import AllowAny
from ..models import CompressionHistory
from ..serializers import CompressionHistorySerializer
@permission_classes([AllowAny])
class CompressionHistoryListView(APIView):
def get(self, request):
user = request.user if request.user.is_authenticated else None
session_id = request.query_params.get('session_id')
if user:
histories = CompressionHistory.objects.filter(user=user)
elif session_id:
histories = CompressionHistory.objects.filter(session_id=session_id)
else:
return JsonResponse({
'success': True,
'data': [],
'total': 0
})
page = int(request.query_params.get('page', 1))
page_size = int(request.query_params.get('page_size', 20))
start = (page - 1) * page_size
end = start + page_size
total = histories.count()
serializer = CompressionHistorySerializer(histories[start:end], many=True)
return JsonResponse({
'success': True,
'data': serializer.data,
'total': total,
'page': page,
'page_size': page_size
})
def post(self, request):
data = request.data.copy()
if request.user.is_authenticated:
data['user'] = request.user.id
serializer = CompressionHistorySerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse({
'success': True,
'data': serializer.data
}, status=status.HTTP_201_CREATED)
return JsonResponse({
'error': '参数错误',
'details': serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)
@permission_classes([AllowAny])
class CompressionHistoryDetailView(APIView):
def delete(self, request, pk):
user = request.user if request.user.is_authenticated else None
session_id = request.query_params.get('session_id')
try:
if user:
history = CompressionHistory.objects.get(pk=pk, user=user)
elif session_id:
history = CompressionHistory.objects.get(pk=pk, session_id=session_id)
else:
return JsonResponse(
{'error': '无权限删除'},
status=status.HTTP_403_FORBIDDEN
)
history.delete()
return JsonResponse({'success': True})
except CompressionHistory.DoesNotExist:
return JsonResponse(
{'error': '记录不存在'},
status=status.HTTP_404_NOT_FOUND
)
@permission_classes([AllowAny])
class CompressionHistoryClearView(APIView):
def delete(self, request):
user = request.user if request.user.is_authenticated else None
session_id = request.query_params.get('session_id')
if user:
count, _ = CompressionHistory.objects.filter(user=user).delete()
elif session_id:
count, _ = CompressionHistory.objects.filter(session_id=session_id).delete()
else:
return JsonResponse(
{'error': '无权限清空'},
status=status.HTTP_403_FORBIDDEN
)
return JsonResponse({
'success': True,
'deleted_count': count
})