feat: ADRF async views (phase1) + native async serializers (phase2) + async cache infra

This commit is contained in:
async-upgrade
2026-09-06 14:26:17 +08:00
parent 9a6577f71e
commit 8f488fcaaa
55 changed files with 2224 additions and 1513 deletions
+13 -12
View File
@@ -1,4 +1,4 @@
from rest_framework.views import APIView
from adrf.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import AllowAny, IsAuthenticated
@@ -20,8 +20,8 @@ class CategoryListView(APIView):
tags=['API接口大全'],
responses={200: '成功'}
)
def get(self, request):
categories = ApiCategory.objects.prefetch_related('items').all()
async def get(self, request):
categories = [c async for c in ApiCategory.objects.prefetch_related('items').all()]
serializer = ApiCategorySerializer(categories, many=True)
return JsonResponse({
'code': 200,
@@ -44,7 +44,7 @@ class ApiItemListView(APIView):
],
responses={200: '成功'}
)
def get(self, request):
async def get(self, request):
category_id = request.query_params.get('category_id')
search = request.query_params.get('search', '')
ordering = request.query_params.get('ordering', '')
@@ -69,7 +69,8 @@ class ApiItemListView(APIView):
else:
items = items.order_by('sort_order', '-created_at')
serializer = ApiItemSerializer(items, many=True, context={'request': request})
item_list = [x async for x in items]
serializer = ApiItemSerializer(item_list, many=True, context={'request': request})
return JsonResponse({
'code': 200,
'message': 'success',
@@ -86,9 +87,9 @@ class ApiItemDetailView(APIView):
tags=['API接口大全'],
responses={200: '成功'}
)
def get(self, request, pk):
async def get(self, request, pk):
try:
item = ApiItem.objects.select_related('category').get(pk=pk, is_enabled=True)
item = await ApiItem.objects.select_related('category').aget(pk=pk, is_enabled=True)
serializer = ApiItemSerializer(item, context={'request': request})
return JsonResponse({
'code': 200,
@@ -112,9 +113,9 @@ class FavoriteToggleView(APIView):
tags=['API接口大全'],
responses={200: '成功'}
)
def post(self, request, pk):
async def post(self, request, pk):
try:
api_item = ApiItem.objects.get(pk=pk, is_enabled=True)
api_item = await ApiItem.objects.aget(pk=pk, is_enabled=True)
except ApiItem.DoesNotExist:
return JsonResponse({
'code': 404,
@@ -122,14 +123,14 @@ class FavoriteToggleView(APIView):
'data': None
}, status=status.HTTP_404_NOT_FOUND)
fav, created = ApiFavorite.objects.get_or_create(user=request.user, api_item=api_item)
fav, created = await ApiFavorite.objects.aget_or_create(user=request.user, api_item=api_item)
if not created:
fav.delete()
await fav.adelete()
is_favorited = False
else:
is_favorited = True
favorites_count = ApiFavorite.objects.filter(api_item=api_item).count()
favorites_count = await ApiFavorite.objects.filter(api_item=api_item).acount()
return JsonResponse({
'code': 200,
'message': 'success',