From 941e5e88a3933afbe6c6dff0799dad9ae3f2b4d2 Mon Sep 17 00:00:00 2001 From: Cameron Lowe Date: Mon, 2 Nov 2015 12:02:55 -0600 Subject: [PATCH] cache contribution get responses --- bulbs/api/views.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/bulbs/api/views.py b/bulbs/api/views.py index 9e4536b9..4647c1ae 100644 --- a/bulbs/api/views.py +++ b/bulbs/api/views.py @@ -2,6 +2,7 @@ from django.conf import settings from django.contrib.auth import get_user_model +from django.core.cache import cache from django.db.models.loading import get_models from django.http import Http404 from django.utils import timezone @@ -215,19 +216,31 @@ def contributions(self, request, **kwargs): # Check if the contribution app is installed if Contribution not in get_models(): return Response([]) - queryset = Contribution.objects.filter(content=self.get_object()) + + content = self.get_object() + cache_key = 'content-{}-contributions'.format(content.id) + + queryset = Contribution.objects.filter(content=content) if request.method == "POST": serializer = ContributionSerializer( queryset, data=get_request_data(request), - many=True) + many=True + ) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) serializer.save() - return Response(serializer.data) + + resp = Response(serializer.data) + cache.set(cache_key, resp) + return resp else: - serializer = ContributionSerializer(queryset, many=True) - return Response(serializer.data) + resp = cache.get(cache_key) + if resp: + return resp + else: + serializer = ContributionSerializer(queryset, many=True) + return Response(serializer.data) @detail_route(methods=["post"], permission_classes=[CanEditContent]) def create_token(self, request, **kwargs):