first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:20:45 +03:00
commit d50f14bcb1
681 changed files with 65020 additions and 0 deletions

250
home/views.py Normal file
View File

@@ -0,0 +1,250 @@
from django.core.cache import cache
from rest_framework import status
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from rest_framework.views import APIView
from core.Permission import ReadOnly
from home.models import Home, AboutMe, MyService, MyServiceTitle, MyResume, Education, Experience, Skill, Knowledge, \
MainMenu
from home.serializers import (HomeSerializer, AboutMeSerializer, MyServiceSerializer, MyServiceTitleSerializer,
MyResumeSerializer, EducationSerializer, ExperienceSerializer, SkillSerializer,
KnowledgeSerializer, MainMenuSerializer)
CACHE_TTL_SECONDS = 60 * 5
# Create your views here.
class HomeDetailView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:active_home'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
home = Home.objects.filter(is_active=True).first()
if home:
serializer = HomeSerializer(home)
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
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)
class AboutMeDetailView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:active_aboutme'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
aboutme = AboutMe.objects.filter(is_active=True).first()
if aboutme:
serializer = AboutMeSerializer(aboutme)
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
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)
class MyServiceList(ListAPIView):
permission_classes = [ReadOnly]
queryset = MyService.objects.order_by('-created_at').filter(is_active=True).all()
serializer_class = MyServiceSerializer
def list(self, request, *args, **kwargs):
cache_key = 'home:service_list'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
response = super().list(request, *args, **kwargs)
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
return response
class MyServiceTitleDetailView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:service_title'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
services_title = MyServiceTitle.objects.filter(is_active=True).first()
if services_title:
serializer = MyServiceTitleSerializer(services_title)
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
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)
class MyResumeDetailView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:resume'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
resume = MyResume.objects.filter(is_active=True).first()
if resume:
serializer = MyResumeSerializer(resume, context={'request': request})
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
return Response(serializer.data)
else:
return Response({"error": "No resume found"}, status=status.HTTP_404_NOT_FOUND)
except Exception as e:
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class EducationListView(ListAPIView):
permission_classes = [ReadOnly]
serializer_class = EducationSerializer
def get_queryset(self):
return Education.objects.filter(is_active=True).order_by('-created_at')
def list(self, request, *args, **kwargs):
cache_key = 'home:education_list'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
response = super().list(request, *args, **kwargs)
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
return response
class ExperienceListView(ListAPIView):
permission_classes = [ReadOnly]
serializer_class = ExperienceSerializer
def get_queryset(self):
return Experience.objects.filter(is_active=True).order_by('-created_at')
def list(self, request, *args, **kwargs):
cache_key = 'home:experience_list'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
response = super().list(request, *args, **kwargs)
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
return response
class SkillListView(ListAPIView):
permission_classes = [ReadOnly]
serializer_class = SkillSerializer
def get_queryset(self):
return Skill.objects.filter(is_active=True).order_by('-created_at')
def list(self, request, *args, **kwargs):
cache_key = 'home:skill_list'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
response = super().list(request, *args, **kwargs)
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
return response
class KnowledgeListView(ListAPIView):
permission_classes = [ReadOnly]
serializer_class = KnowledgeSerializer
def get_queryset(self):
return Knowledge.objects.filter(is_active=True).order_by('-created_at')
def list(self, request, *args, **kwargs):
cache_key = 'home:knowledge_list'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
response = super().list(request, *args, **kwargs)
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
return response
class HomeBundleView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:bundle:v1'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
home = Home.objects.filter(is_active=True).first()
aboutme = AboutMe.objects.filter(is_active=True).first()
services_title = MyServiceTitle.objects.filter(is_active=True).first()
resume = MyResume.objects.filter(is_active=True).first()
menu = MainMenu.objects.filter(is_active=True).first()
services = MyService.objects.filter(is_active=True).order_by('-created_at')
education = Education.objects.filter(is_active=True).order_by('-created_at')
experience = Experience.objects.filter(is_active=True).order_by('-created_at')
skills = Skill.objects.filter(is_active=True).order_by('-created_at')
knowledge = Knowledge.objects.filter(is_active=True).order_by('-created_at')
payload = {
"home": HomeSerializer(home).data if home else None,
"about_me": AboutMeSerializer(aboutme).data if aboutme else None,
"service_title": MyServiceTitleSerializer(services_title).data if services_title else None,
"resume": MyResumeSerializer(resume, context={"request": request}).data if resume else None,
"main_menu": MainMenuSerializer(menu).data if menu else None,
"services": MyServiceSerializer(services, many=True).data,
"education": EducationSerializer(education, many=True).data,
"experience": ExperienceSerializer(experience, many=True).data,
"skills": SkillSerializer(skills, many=True).data,
"knowledge": KnowledgeSerializer(knowledge, many=True).data,
}
cache.set(cache_key, payload, timeout=CACHE_TTL_SECONDS)
return Response(payload)
except Exception as e:
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class MainMenuDetailView(APIView):
permission_classes = [ReadOnly]
def get(self, request):
try:
cache_key = 'home:active_menu'
cached_data = cache.get(cache_key)
if cached_data:
return Response(cached_data)
# Cache'de yoksa veritabanından al
menu = MainMenu.objects.filter(is_active=True).first()
if menu:
serializer = MainMenuSerializer(menu)
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
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)