import json from django.shortcuts import render from django.http import JsonResponse from rest_framework.decorators import api_view from rest_framework.response import Response from api.models import Rank from django.views.decorators.csrf import csrf_protect from django.views.decorators.cache import cache_page from rest_framework.views import APIView from django.utils.decorators import method_decorator TIMEOUT = 86400 from django.core.cache import cache, caches @method_decorator(decorator=csrf_protect, name='post') class RankView(APIView): def get(self, request, client_number): if Rank.objects.filter(client_number=client_number): if cache.get('data'):# 查詢緩存中有沒有存着數據 result = json.loads(cache.get('data')) result[client_number] = result[str(client_number)] print('緩存的') else: rank_obj = Rank.objects.order_by('-mark') result = {'msg': '查詢成功'} order = 1 for rank in rank_obj: result[rank.client_number] = {'mark': rank.mark, 'order': order} order += 1 cache.set('data', json.dumps(result), TIMEOUT)# 將查出來的數據存到緩存中,get\set只能獲取和存儲字符串 result[str(client_number)] = result[client_number] print('生成的') else: result = {'msg': '沒有相關數據'} return Response(result) def post(self, request): try: c_number = request.POST['client_number'] c_mark = request.POST['client_mark'] Rank.objects.update_or_create( client_number=c_number, defaults={'mark': c_mark} ) result = {'msg': '上傳成功'} except: result = {'msg': '上傳失敗'} cache.delete('data') # 將緩存中的舊數據刪掉 return JsonResponse(result)