본문 바로가기
TIL(Daily)/Django

Thu/03/Nov/22 Django-추천 시스템 프로젝트 -2

by Hawie 2022. 11. 4.

오늘은 프로젝트 시작 한 날이다 나는 백엔드 기능 중에서는 먼저 영화 포스터 좋아요/ 댓글 좋아요

기능을 하는 맡게 되었다.

복잡한 기능 구현 기능은 아니라 생각보다는 문제 없이 잘 끝낼수 있게 되었다.

 

그리고 팀원 들과 git 으로 협업 했는데 머지 충돌이 발생 했지만 같이 해결 했다.

내일 부터는 프론트 엔드 시작하게 된다. 그래서 자바스크립트에 대해 알아보고

HTML/CSS 를 잘 활용 하는 방법을 찾으면서 오늘 하루를 보내게 되었다.

 

마지막으로 처음에 좋아요 기능에서는 좋아요 좋아요 취소 기능많있었지만,

serializers.py 이용하여 count 도 추가 구현했다.

 

 

오늘 구현한 코드.

views.py

class ArticlesMovieLikeView(APIView): #영화좋아yo
    def post(self, request,movie_id ):
        article = get_object_or_404(Movie, id=movie_id)
        if request.user in article.movie_like.all():
            article.movie_like.remove(request.user)
            return Response("좋아요취소했습니다", status=status.HTTP_200_OK)
        else:
            article.movie_like.add(request.user)
            return Response("좋아요했습니다", status=status.HTTP_200_OK)
            
            
 class ArticlesCommentLikeView(APIView): #영화리뷰좋아요

    def post(self, request, comment_id,movie_id ):
        article = get_object_or_404(Comment, id=comment_id)
        if request.user in article.comment_like.all():
            article.comment_like.remove(request.user)
            return Response("댓글,좋아요취소했습니다", status=status.HTTP_200_OK)
        else:
            article.comment_like.add(request.user)
            return Response("댓글,좋아요했습니다", status=status.HTTP_200_OK)
          
  ---------------------------------------------------------------------------------
 
  urls.py



urlpatterns = [
    
    path('<int:movie_id>/like/', views.ArticlesMovieLikeView.as_view(), name = 'movie_like_view'),
    path('<int:movie_id>/comment/<int:comment_id>/like/', views.ArticlesCommentLikeView.as_view(), name = 'articles_comment_like_view'),
    
    
]




---------------------------------------------------------------------------------


models.py


class Movie(models.Model):

    movie_id = models.CharField(max_length =50)
    image = models.URLField()
    title = models.CharField(max_length =50)
    release_year = models.DecimalField(max_digits=8, decimal_places=0)
    rating = models.CharField(max_length =50)
    duration = models.CharField(max_length =50)
    description = models.TextField()
    movie_like = models.ManyToManyField(User, related_name="like_movie",blank=True)
    category = models.CharField(max_length=20, null =True)


class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now= True)
    comment_like = models.ManyToManyField(User, related_name="like_comment",blank=True)
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE,blank=True, related_name="movie_comment")
    rating = models.CharField(max_length=10, blank=True)
    
    def __str__(self):
        return str(self.content)
        
        
  ---------------------------------------------------------------------------
  serializers.py
  
  class ArticleListSerializer(serializers.ModelSerializer):

    movie_like_count= serializers.SerializerMethodField()


    def get_movie_like_count(self, obj):
        return obj.movie_like.count()

    class Meta:
        model = Movie
        fields='__all__'
        
        
        
    class CommentSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    comment_like_count= serializers.SerializerMethodField()


    def get_comment_like_count(self, obj):
        return obj.comment_like.count()

    def get_user(self, obj):
        return obj.user.nickname

    class Meta:
        model = Comment
        fields=('user', 'content','created_at', 'comment_like_count', 'rating',)

 

 

댓글