feat: 100% async - native async serializers (adata/asave/acreate), async cache (redis.asyncio), view call-site migration
This commit is contained in:
@@ -25,7 +25,7 @@ class ColorHistoryListView(APIView):
|
||||
created_at__gte=cutoff
|
||||
).order_by('-created_at')[:50]]
|
||||
serializer = ColorHistorySerializer(histories, many=True)
|
||||
return Response(serializer.data)
|
||||
return Response(await serializer.adata)
|
||||
|
||||
async def post(self, request):
|
||||
color = request.data.get('color', '')
|
||||
@@ -43,13 +43,13 @@ class ColorHistoryListView(APIView):
|
||||
existing.created_at = timezone.now()
|
||||
await existing.asave()
|
||||
serializer = ColorHistorySerializer(existing)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
return Response(await serializer.adata, status=status.HTTP_200_OK)
|
||||
history = await ColorHistory.objects.acreate(
|
||||
user=request.user,
|
||||
color=color
|
||||
)
|
||||
serializer = ColorHistorySerializer(history)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(await serializer.adata, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class ColorHistoryDetailView(APIView):
|
||||
|
||||
@@ -35,7 +35,7 @@ class CompressionHistoryListView(APIView):
|
||||
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'data': serializer.data,
|
||||
'data': await serializer.adata,
|
||||
'total': total,
|
||||
'page': page,
|
||||
'page_size': page_size
|
||||
@@ -50,10 +50,10 @@ class CompressionHistoryListView(APIView):
|
||||
serializer = CompressionHistorySerializer(data=data)
|
||||
if serializer.is_valid():
|
||||
# DRF 序列化器 save() 为同步 ORM 操作,sync_to_async 兜底
|
||||
await sync_to_async(serializer.save)()
|
||||
await serializer.asave()
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'data': serializer.data
|
||||
'data': await serializer.adata
|
||||
}, status=status.HTTP_201_CREATED)
|
||||
|
||||
return JsonResponse({
|
||||
|
||||
@@ -24,7 +24,7 @@ class ToolCategoryListView(APIView):
|
||||
serializer = ToolCategorySerializer(categories, many=True)
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'data': serializer.data
|
||||
'data': await serializer.adata
|
||||
})
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ class ToolListView(APIView):
|
||||
|
||||
tool_list = [t async for t in tools]
|
||||
serializer = ToolSerializer(tool_list, many=True)
|
||||
data = serializer.data
|
||||
data = await serializer.adata
|
||||
|
||||
# 构建 favorites_count 映射
|
||||
favorites_count_map = {
|
||||
@@ -111,7 +111,7 @@ class ToolDetailView(APIView):
|
||||
try:
|
||||
tool = await Tool.objects.select_related('category').aget(pk=pk, is_enabled=True)
|
||||
serializer = ToolSerializer(tool)
|
||||
data = serializer.data
|
||||
data = await serializer.adata
|
||||
if request.user.is_authenticated:
|
||||
data['is_favorited'] = await ToolFavorite.objects.filter(
|
||||
user=request.user, tool=tool
|
||||
|
||||
Reference in New Issue
Block a user