38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from django.core.cache import cache
|
||
from rest_framework import status
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
|
||
from core.Permission import ReadOnly
|
||
from settings.models import Setting
|
||
from settings.serializers import SettingSerializer
|
||
from django.utils.decorators import method_decorator
|
||
from django.views.decorators.cache import cache_page
|
||
|
||
|
||
# Create your views here.
|
||
class SettingDetailView(APIView):
|
||
permission_classes = [ReadOnly]
|
||
|
||
@method_decorator(cache_page(60 * 5))
|
||
def get(self, request):
|
||
try:
|
||
# Cache'den veri kontrolü
|
||
cache_key = 'active_setting'
|
||
cached_data = cache.get(cache_key)
|
||
|
||
if cached_data:
|
||
return Response(cached_data)
|
||
|
||
# Cache'de yoksa veritabanından al
|
||
setting = Setting.objects.filter(is_active=True).first()
|
||
if setting:
|
||
serializer = SettingSerializer(setting)
|
||
# 5 dakika (300 saniye) cache'le
|
||
cache.set(cache_key, serializer.data, timeout=300)
|
||
return Response(serializer.data)
|
||
else:
|
||
return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND)
|
||
except Exception as e:
|
||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|