[python] Django REST framework에서의 댓글 좋아요 처리 방법

Django REST framework은 웹 애플리케이션에서 API를 쉽게 개발하고 관리할 수 있는 도구입니다. 댓글 좋아요 기능을 구현하기 위해서는 몇 가지 단계를 거쳐야 합니다. 이 블로그 포스트에서는 Django REST framework에서 댓글 좋아요 처리 방법을 알아보겠습니다.

1. 댓글 모델 생성

가장 먼저 댓글 모델을 생성해야 합니다. 댓글 모델에는 댓글 내용, 작성자, 작성일자 등의 필드가 포함되어야 합니다. 댓글에는 댓글을 작성한 사용자의 좋아요 여부에 대한 정보도 필요합니다. 따라서 이를 위한 is_liked 필드를 추가할 수 있습니다.

from django.db import models
from django.contrib.auth.models import User

class Comment(models.Model):
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    is_liked = models.BooleanField(default=False)

2. 댓글 Serializer 생성

다음으로 댓글 Serializer를 생성해야 합니다. Serializer는 모델 데이터를 JSON 형식으로 변환하거나 JSON 데이터를 모델 형식으로 변환할 수 있게 해줍니다. 댓글의 좋아요 여부를 갱신하기 위한 toggle_like 메소드를 추가할 수 있습니다.

from rest_framework import serializers
from .models import Comment

class CommentSerializer(serializers.ModelSerializer):
    author = serializers.StringRelatedField()
    
    class Meta:
        model = Comment
        fields = '__all__'
      
    def toggle_like(self, instance):
        instance.is_liked = not instance.is_liked
        instance.save()

3. 댓글 ViewSet 생성

ViewSet는 Django REST framework에서 제공하는 기능으로, API의 CRUD 작업을 처리할 수 있게 해줍니다. 댓글을 좋아요 토글하기 위한 toggle_like 액션을 추가한 ViewSet을 생성해야 합니다.

from rest_framework.viewsets import ModelViewSet
from .models import Comment
from .serializers import CommentSerializer

class CommentViewSet(ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    
    @action(methods=['put'], detail=True)
    def toggle_like(self, request, pk=None):
        comment = self.get_object()
        serializer = self.get_serializer(comment)
        serializer.toggle_like(comment)
        return Response(serializer.data)

4. URL 설정

마지막으로, URL 설정을 해야 합니다. ViewSet을 URL에 매핑하고 토글되는 좋아요 액션을 추가해야 합니다.

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CommentViewSet

router = DefaultRouter()
router.register('comments', CommentViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

이제 Django REST framework에서 댓글 좋아요를 처리하는 기능이 준비되었습니다. 이제 API를 통해 댓글의 좋아요를 토글할 수 있습니다.

참고 자료

주의사항: 이 예시 코드는 단순한 예시일 뿐이며, 실제 프로젝트에는 추가적인 작업과 예외처리가 필요할 수 있습니다. 프로젝트에 따라 코드를 수정하여 사용하세요.