From 7e0d9749c47ef451f26b7737a05ae2bcc16b74b6 Mon Sep 17 00:00:00 2001 From: corbz Date: Mon, 29 Jan 2024 20:44:08 +0000 Subject: [PATCH] list, create and delete views --- apps/api/serializers.py | 5 ++--- apps/api/urls.py | 5 ++++- apps/api/views.py | 25 +++++++++++++++++-------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/apps/api/serializers.py b/apps/api/serializers.py index b993680..81cb005 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -2,8 +2,6 @@ import logging -from django.apps import apps -from django.conf import settings from rest_framework import serializers from apps.home.models import RSSFeed, FeedChannel @@ -11,7 +9,7 @@ from apps.home.models import RSSFeed, FeedChannel log = logging.getLogger(__name__) -class DynamicModelSerializer(serializers.ModelSerializer): +class DynamicModelSerializer(serializers.HyperlinkedModelSerializer): """For use with GET requests, to specify which fields to include or exclude Mimics some graphql functionality. @@ -107,6 +105,7 @@ class DynamicModelSerializer(serializers.ModelSerializer): class RssFeedSerializer(DynamicModelSerializer): + image = serializers.ImageField() class Meta: model = RSSFeed diff --git a/apps/api/urls.py b/apps/api/urls.py index 97c2b63..7856db4 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -10,6 +10,9 @@ urlpatterns = [ path("api-auth/", include("rest_framework.urls", namespace="rest_framework")), path("api-token-auth/", obtain_auth_token), - path("rssfeed/", views.RSSFeedListApiView.as_view(), name="rssfeed"), + path("rssfeed/", include([ + path("", views.RSSFeedList.as_view(), name="rssfeed"), + path("/", views.RSSFeedDetail.as_view(), name="rssfeed-detail") + ])), path("feedchannel/", views.FeedChannelListApiView.as_view(), name="feedchannel") ] \ No newline at end of file diff --git a/apps/api/views.py b/apps/api/views.py index 330e508..049f5db 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -1,6 +1,7 @@ # -*- encoding: utf-8 -*- import logging +import base64 import httpx from django.http import HttpResponse @@ -15,6 +16,7 @@ from rest_framework.response import Response from rest_framework import status, permissions, filters, generics from rest_framework.pagination import PageNumberPagination from rest_framework.authentication import SessionAuthentication, TokenAuthentication +from rest_framework.parsers import MultiPartParser, FormParser from asgiref.sync import async_to_sync from apps.home.models import RSSFeed, FeedChannel @@ -23,12 +25,11 @@ from .serializers import RssFeedSerializer, FeedChannelSerializer log = logging.getLogger(__name__) -class RSSFeedListApiView(generics.ListAPIView): +class RSSFeedList(generics.ListAPIView, generics.CreateAPIView): authentication_classes = [SessionAuthentication, TokenAuthentication] permission_classes = [permissions.IsAuthenticated] serializer_class = RssFeedSerializer - queryset = RSSFeed.objects.all().order_by("-created_at") filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] @@ -36,14 +37,22 @@ class RSSFeedListApiView(generics.ListAPIView): search_fields = ["name"] ordering_fields = ["created_at"] - def post(self, request): - serializer = self.serializer_class(data=request.data) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data, status.HTTP_201_CREATED) +class RSSFeedDetail(generics.RetrieveUpdateDestroyAPIView): + authentication_classes = [SessionAuthentication, TokenAuthentication] + permission_classes = [permissions.IsAuthenticated] + parser_classes = [MultiPartParser, FormParser] - return Response(serializer.errors, status.HTTP_400_BAD_REQUEST) + serializer_class = RssFeedSerializer + queryset = RSSFeed.objects.all().order_by("-created_at") + + # def delete(self, request, uuid: str): + # try: + # rss_feed = RSSFeed.objects.get(uuid=uuid) + # rss_feed.delete() + # return Response(status=status.HTTP_204_NO_CONTENT) + # except RSSFeed.DoesNotExist: + # return Response({"detail": "RSSFeed Not Found"}, status.HTTP_404_NOT_FOUND) class FeedChannelListApiView(generics.ListAPIView):