좋아요 / 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)
'Python > Django' 카테고리의 다른 글
| [DRF] 14. 테스트 코드란? (0) | 2023.04.27 |
|---|---|
| [DRF] 13. 개인페이지 (Q객체, F객체) (0) | 2023.04.27 |
| [DRF] 11. 댓글 API(두 개의 모델 참조) (0) | 2023.04.26 |
| [DRF] 10. 게시글 API (0) | 2023.04.26 |
| [DRF] 09. 스태틱, 미디어 폴더 세팅 (0) | 2023.04.26 |