좋아요 / Todo Done

  • Todos 모델의 like에 로그인한 유저가 없으면 저장, 있으면 제거합니다.
  • Todos 모델의 is_complete 필드를 True로 바꾼다.

 

(app - models.py) 추가하기

class Todos(models.Model):
    like = models.ManyToManyField(Users, related_name='likey')

 

(app - urls.py)

urlpatterns = [
    path('<int:todo_id>/like/', views.LikeView.as_view(), name='like_this'),
    path('<int:todo_id>/done/', views.DoneView.as_view(), name='done_this'),
]

 

(app - views.py)

class LikeView(APIView):
    def post(self, request, todo_id):
        todo = get_object_or_404(Todos, id=todo_id)
        print(todo.like)
        if request.user in todo.like.all():
            todo.like.remove(request.user)
            return Response('헤어져요', status=status.HTTP_200_OK)
        else:
            todo.like.add(request.user)
            return Response('좋아요', status=status.HTTP_200_OK)
    
class DoneView(APIView):
    def post(self, request, todo_id):
        todo = get_object_or_404(Todos, id=todo_id)
        if request.user == todo.user:
            todo.is_complete = True
            todo.save()
            return Response('할 일 완료', status=status.HTTP_200_OK)
        else:
            return Response({'message':'권한이 없습니다'},status=status.HTTP_400_BAD_REQUEST)

 

 

 

 

 

 

팔로우

  • 자신은 팔로우 하지 않는다.
  • 팔로우, 언팔로우 모두 같은 모델을 참조해야한다.

(app - urls.py)

urlpatterns = [
    path('<int:user_id>/follow/', views.FollowView.as_view(), name='follow_view'),
]

 

(app - models.py)

    # 한쪽이 팔로우 하면 다른 한쪽도 팔로우를 걸지 않도록
    # 대칭(symmetrical) 설정을 False로 만듬
    follows = models.ManyToManyField('self', symmetrical=False, related_name='following', blank=True)

 

(app - views.py)

class FollowView(APIView):
    def post(self, request, user_id):
        other = get_object_or_404(Users, id=user_id)
        me = request.user
        # 팔로우 하려는 사람이 내가 아닐 때
        if me != other:
            if other not in me.follows.all():
                me.follows.add(other)
                return Response('팔로우', status=status.HTTP_200_OK)
            else:
                me.follows.remove(other)
                return Response('언팔로우', status=status.HTTP_200_OK)
        else:
            return Response({'message':'나를 팔로우 할 수 없습니다'}, status=status.HTTP_400_BAD_REQUEST)

 

+ Recent posts