From b2c918ea451c73f43f14af1603fec2b2731caa01 Mon Sep 17 00:00:00 2001 From: Levodeanschi Anastasia Date: Sat, 1 Aug 2026 11:15:18 +0300 Subject: [PATCH] Milstone1 --- apps/blog/admin.py | 3 ++- apps/blog/models.py | 6 ++++++ apps/blog/serializers.py | 8 ++++++++ apps/blog/urls.py | 1 + apps/blog/views.py | 24 ++++++++++++++++++++++-- 5 files changed, 39 insertions(+), 3 deletions(-) diff --git a/apps/blog/admin.py b/apps/blog/admin.py index f73d5ded..c154ba8d 100644 --- a/apps/blog/admin.py +++ b/apps/blog/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin -from apps.blog.models import Blog, Category +from apps.blog.models import Blog, Category, Comment admin.site.register(Blog) admin.site.register(Category) +admin.site.register(Comment) diff --git a/apps/blog/models.py b/apps/blog/models.py index 141c4c26..81270204 100644 --- a/apps/blog/models.py +++ b/apps/blog/models.py @@ -14,3 +14,9 @@ class Blog(models.Model): body = models.TextField() posted = models.DateField(db_index=True, auto_now_add=True) category = models.ForeignKey(Category, on_delete=models.CASCADE) + enabled = models.BooleanField() + + +class Comment(models.Model): + text = models.TextField() + blog = models.ForeignKey(Blog, on_delete=models.CASCADE) diff --git a/apps/blog/serializers.py b/apps/blog/serializers.py index 9137b4c3..5a9287ca 100644 --- a/apps/blog/serializers.py +++ b/apps/blog/serializers.py @@ -1,3 +1,5 @@ +from tokenize import Comment + from rest_framework import serializers from apps.blog.models import Blog, Category @@ -13,3 +15,9 @@ class BlogSerializer(serializers.ModelSerializer): class Meta: model = Blog fields = "__all__" + + +class CommentSerializer(serializers.ModelSerializer): + class Meta: + model = Comment + fields = "__all__" diff --git a/apps/blog/urls.py b/apps/blog/urls.py index 402081cf..60213c55 100644 --- a/apps/blog/urls.py +++ b/apps/blog/urls.py @@ -13,5 +13,6 @@ urlpatterns = [ path("blog", BlogListView.as_view(), name="blog_list"), path("blog/", BlogItemView.as_view(), name="blog_item"), + path("blog//comments/", BlogItemView.as_view(), name="blog_comments"), *router.urls, ] diff --git a/apps/blog/views.py b/apps/blog/views.py index a9d39b23..ea8063de 100644 --- a/apps/blog/views.py +++ b/apps/blog/views.py @@ -5,7 +5,7 @@ from rest_framework.response import Response from apps.blog.models import Blog, Category -from apps.blog.serializers import BlogSerializer, CategorySerializer +from apps.blog.serializers import BlogSerializer, CategorySerializer, CommentSerializer from apps.common.permissions import ReadOnly @@ -22,6 +22,12 @@ def get(self, request: Request) -> Response: blogs = Blog.objects.all() return Response(self.get_serializer(blogs, many=True).data) + def post(self, request: Request) -> Response: + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data) + class BlogItemView(GenericAPIView): serializer_class = BlogSerializer @@ -29,4 +35,18 @@ class BlogItemView(GenericAPIView): def get(self, request: Request, pk: int) -> Response: blog: Blog = get_object_or_404(Blog.objects.all(), pk=pk) - return Response(self.get_serializer(blog).data) + blog_data: Blog = BlogSerializer(blog).data + comments = blog.comments.all() + comments_data = CommentSerializer(comments, many=True).data + return Response({"blog": blog_data, "comments": comments_data}) + + +class CommentView(GenericAPIView): + serializer_class = CommentSerializer + permission_classes = (ReadOnly, IsAuthenticated) + + def post(self, request: Request) -> Response: + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data)