diff --git a/playlist/serializers/__init__.py b/playlist/serializers/__init__.py index 442a01c..7c43ed2 100644 --- a/playlist/serializers/__init__.py +++ b/playlist/serializers/__init__.py @@ -2,3 +2,4 @@ from .track import TrackSerializer from .artist import ArtistSerializer from .user import UserSerializer from .album import AlbumSerializer +from .profile import ProfileSerializer, BackgroundSerializer diff --git a/playlist/serializers/profile.py b/playlist/serializers/profile.py new file mode 100644 index 0000000..892481b --- /dev/null +++ b/playlist/serializers/profile.py @@ -0,0 +1,14 @@ +from playlist.models import Profile, Background +from rest_framework import serializers + +class BackgroundSerializer(serializers.ModelSerializer): + class Meta: + model = Background + fields = '__all__' + +class ProfileSerializer(serializers.ModelSerializer): + background = BackgroundSerializer() + + class Meta: + model = Profile + fields = '__all__' diff --git a/playlist/serializers/user.py b/playlist/serializers/user.py index 3a7808c..c7d7bcb 100644 --- a/playlist/serializers/user.py +++ b/playlist/serializers/user.py @@ -1,7 +1,17 @@ from django.contrib.auth.models import User from rest_framework import serializers -class UserSerializer(serializers.ModelSerializer): +class UserSerializer(serializers.HyperlinkedModelSerializer): + # Add explicit reverse lookup to profile + profile = serializers.HyperlinkedRelatedField( + view_name='api-profile', + lookup_field='id', + read_only=True + ) + class Meta: model = User - fields = ['id', 'username', 'email'] + fields = ['url', 'id', 'username', 'email', 'profile'] + extra_kwargs = { + 'url': {'view_name': 'api-user', 'lookup_field': 'id'} + } diff --git a/playlist/urls.py b/playlist/urls.py index a7e091c..1c22c4c 100644 --- a/playlist/urls.py +++ b/playlist/urls.py @@ -11,6 +11,9 @@ urlpatterns = [ path('api/artist', views.ArtistListView.as_view(), name="api-artists"), path('api/users', views.UserListView.as_view(), name="api-users"), path('api/user/', views.UserDetailView.as_view(), name="api-user"), + path('api/profile/', views.ProfileDetailView.as_view(), name="api-profile"), + path('api/profile/background', views.BackgroundListView.as_view(), name="api-backgrounds"), + path('api/profile/background/', views.BackgroundDetailView.as_view(), name="api-background"), path('api/album/', views.AlbumDetailView.as_view(), name="api-album"), path('api/album', views.AlbumListView.as_view(), name="api-albums"), path('track/', views.NominateView.as_view(), name="nominate"), diff --git a/playlist/views/__init__.py b/playlist/views/__init__.py index ee95d78..00527f8 100644 --- a/playlist/views/__init__.py +++ b/playlist/views/__init__.py @@ -4,3 +4,4 @@ from .api.track import * from .api.artist import * from .api.user import * from .api.album import * +from .api.profile import * diff --git a/playlist/views/api/profile.py b/playlist/views/api/profile.py new file mode 100644 index 0000000..3cfa494 --- /dev/null +++ b/playlist/views/api/profile.py @@ -0,0 +1,35 @@ +from pickle import BUILD +from playlist import serializers +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.authentication import SessionAuthentication +from rest_framework.permissions import IsAuthenticated +from playlist.serializers import ProfileSerializer, BackgroundSerializer +from playlist.models import Profile, Background + +class ProfileDetailView(APIView): + authentication_classes = [SessionAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request, id): + profile = Profile.objects.get(pk=id) + serializer = ProfileSerializer(profile) + return Response(serializer.data) + +class BackgroundListView(APIView): + authentication_classes = [SessionAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request): + backgrounds = Background.objects.all() + serializer = BackgroundSerializer(backgrounds, many=True) + return Response(serializer.data) + +class BackgroundDetailView(APIView): + authentication_classes = [SessionAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request, id): + background = Background.objects.get(pk=id) + serializer = BackgroundSerializer(background) + return Response(serializer.data) diff --git a/playlist/views/api/user.py b/playlist/views/api/user.py index dad065b..45c5ee6 100644 --- a/playlist/views/api/user.py +++ b/playlist/views/api/user.py @@ -10,7 +10,7 @@ class UserListView(APIView): permission_classes = [IsAuthenticated] def get(self, request): users = User.objects.all() - serializer = UserSerializer(users, many=True) + serializer = UserSerializer(users, many=True, context={'request': request}) return Response(serializer.data) class UserDetailView(APIView): @@ -18,5 +18,5 @@ class UserDetailView(APIView): permission_classes = [IsAuthenticated] def get(self, request, id): user = User.objects.get(pk=id) - serializer = UserSerializer(user) + serializer = UserSerializer(user, context={'request': request}) return Response(serializer.data)