from rest_framework import generics, status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.parsers import MultiPartParser, FormParser, JSONParser from django.shortcuts import get_object_or_404 from .models import DesignSettings from .serializers import DesignSettingsSerializer, PublicDesignSettingsSerializer class DesignSettingsView(generics.RetrieveUpdateAPIView): """ API для получения и обновления настроек дизайна пользователя """ serializer_class = DesignSettingsSerializer permission_classes = [IsAuthenticated] parser_classes = [MultiPartParser, FormParser, JSONParser] # Поддержка файлов и JSON def get_object(self): # Получаем или создаем настройки для текущего пользователя settings, created = DesignSettings.objects.get_or_create( user=self.request.user ) return settings def perform_update(self, serializer): serializer.save(user=self.request.user) @api_view(['GET']) def get_user_design_settings(request, username=None): """ Получение публичных настроек дизайна пользователя для отображения его страницы """ if username: from django.contrib.auth import get_user_model User = get_user_model() try: user = User.objects.get(username=username) try: settings = DesignSettings.objects.get(user=user) # Возвращаем только публичные настройки serializer = PublicDesignSettingsSerializer(settings, context={'request': request}) return Response(serializer.data) except DesignSettings.DoesNotExist: # Возвращаем настройки по умолчанию, если пользователь еще не настроил дизайн default_settings = { 'theme_color': '#ffffff', 'dashboard_layout': 'list', 'groups_default_expanded': True, 'show_group_icons': True, 'show_link_icons': True, 'dashboard_background_color': '#f8f9fa', 'font_family': 'sans-serif' } return Response(default_settings) except User.DoesNotExist: return Response({'error': 'Пользователь не найден'}, status=404) else: # Для получения настроек текущего пользователя требуется авторизация if not request.user.is_authenticated: return Response({'error': 'Требуется авторизация'}, status=401) # Возвращаем настройки текущего пользователя settings, created = DesignSettings.objects.get_or_create(user=request.user) serializer = DesignSettingsSerializer(settings, context={'request': request}) return Response(serializer.data)