Files
links/.history/backend/api/views_20250507141914.py

119 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# api/views.py
from rest_framework import generics, viewsets, permissions,status
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, LinkSerializer, LinkGroupSerializer
from .models import Link, LinkGroup
from rest_framework.views import APIView
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
User = get_user_model()
@extend_schema(
parameters=[
OpenApiParameter(
name='id',
type=int,
location=OpenApiParameter.PATH
)
]
)
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
queryset = LinkGroup.objects.all()
serializer_class = LinkGroupSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
# возвращаем только группы текущего пользователя
return self.queryset.filter(owner=self.request.user).order_by('order')
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')
from .serializers import UserSerializer # нужно завести сериализатор для пользователя
User = get_user_model()
class UserProfileView(generics.RetrieveAPIView):
"""
Возвращает данные авторизованного пользователя.
GET /api/auth/user/
"""
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
def get_object(self):
return self.request.user
class PublicUserGroupsView(APIView):
"""
GET /api/users/{username}/public/
"""
permission_classes = [permissions.AllowAny]
def get(self, request, username):
User = get_user_model()
user = get_object_or_404(User, username=username)
# Берём все группы пользователя вместе с их ссылками
groups_qs = LinkGroup.objects.filter(owner=user).prefetch_related('links')
result = {
"username": user.username,
"groups": []
}
for grp in groups_qs:
# поле image у группы
grp_image_url = grp.image.url if getattr(grp, 'image', None) else None
grp_data = {
"id": grp.id,
"name": grp.name,
"image": grp_image_url,
"links": [],
}
for ln in grp.links.all():
# поле image у отдельной ссылки
link_image_url = ln.image.url if getattr(ln, 'image', None) else None
grp_data["links"].append({
"id": ln.id,
"title": ln.title,
"url": ln.url,
"image": link_image_url,
})
result["groups"].append(grp_data)
return Response(result, status=status.HTTP_200_OK)