Skip to content

Commit fc5bc37

Browse files
committed
add view for cached products
1 parent 731ebe9 commit fc5bc37

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

store/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from django.urls import path
22

3-
from .views import view_products
3+
from .views import view_products, view_cached_products
44

55
app_name = 'store'
66

77
urlpatterns = [
88
path('', view_products, name='products'),
9+
path('cache/', view_cached_products, name='cached-products'),
910
]

store/views.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,35 @@
11
from django.shortcuts import render
2+
from django.core.cache import cache
3+
from django.conf import settings
4+
from django.core.cache.backends.base import DEFAULT_TIMEOUT
25

36
from rest_framework.decorators import api_view
47
from rest_framework.response import Response
58
from rest_framework import status
69

710
from .models import Product
811

12+
CACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)
13+
914
@api_view(['GET'])
1015
def view_products(request):
1116
products = Product.objects.all()
1217
results = [product.to_json() for product in products]
1318
return Response(data=results, status=status.HTTP_201_CREATED)
19+
20+
21+
# view for cached products
22+
@api_view(['GET'])
23+
def view_cached_products(request):
24+
if 'product' in cache:
25+
print("True")
26+
products = cache.get('product')
27+
return Response(data=products, status=status.HTTP_201_CREATED)
28+
else:
29+
print("False")
30+
products = Product.objects.all()
31+
results = [product.to_json() for product in products]
32+
33+
# store products in cache
34+
cache.set(products, results, timeout=CACHE_TTL)
35+
return Response(data=results, status=status.HTTP_201_CREATED)

0 commit comments

Comments
 (0)