from rest_framework import generics, viewsets, permissions from django.contrib.auth.models import User from rest_framework_simplejwt.views import TokenObtainPairView from .serializers import ( RegisterSerializer, LinkSerializer, LinkGroupSerializer ) from .models import Link, LinkGroup 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): serializer_class = LinkGroupSerializer permission_classes = (permissions.IsAuthenticated,) def get_queryset(self): return LinkGroup.objects.filter(owner=self.request.user).order_by('order') def perform_create(self, serializer): serializer.save(owner=self.request.user) 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') # api/urls.py from django.urls import path, include from rest_framework.routers import DefaultRouter from .views import ( RegisterView, LoginView, LinkViewSet, LinkGroupViewSet, UserLinksListView ) router = DefaultRouter() router.register(r'links', LinkViewSet, basename='links') router.register(r'groups', LinkGroupViewSet, basename='groups') urlpatterns = [ path('auth/register/', RegisterView.as_view(), name='auth-register'), path('auth/login/', LoginView.as_view(), name='auth-login'), path('users//links/', UserLinksListView.as_view(), name='user-links'), path('', include(router.urls)), ]