django實現消除緩存

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)
相關文章
相關標籤/搜索