feat: ADRF async views (phase1) + native async serializers (phase2) + async cache infra
This commit is contained in:
+13
-12
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user