본문으로 바로가기

이번주에는 DRF를 연습하면서 커뮤니티를 직접 만들어봤는데 가장 기억에 남는 오류들은 처음겪어본 urls.py에서 생긴 오류가 아닐까 싶다.

처음 만났던 오류는 int와 str로 path parameter 를 사용해서 get요청에서 url로 서버에 정보를 전달하는데

path('<int:post_id>') 와 path('<str:category>') 처럼 url 처음에 구분이 되지않는str과 int를 전달하게 해놓고 서버를 돌리니까 아무리 get요청을 해도 서버에서 데이터를 받아오지 못했다. 카테고리를 정해서 데이터를 들고오려는 상황이였는데 아무래도 int와 str에 둘다 해당되니 다른쪽에 요청을 해서 데이터를 가져오지 못하는 것 같았다 그리고 빈 데이터만 가져온걸 보니 숫자를 입력하면 str로 인식이되고 1이라는 카테고리를 가진데이터를 가져오게 된 것 같다.  그래서 category/<str> 으로 변경했는데 바로 정상적으로 데이터를 가져올 수 있었다.

이오류를 찾는데 에러가 뜨지않아서 찾는데 어려움을 겪었다.

두번째 오류는 path parameter로 두개의 int를 보내는 like에서 경험했다. path parameter로 전달한 파라미터를 CBV에서 사용을 해야하는데 url에서 전달한 파라미터를 메소드에서 사용하지않아서 넣어두지 않았는데 오류가생겼다.

이것도 정확한 이유를 모르다가 url에서 받는 파라미터를 다 넣어줬더니 해결되었다. 함수에서 사용하지 않더라도 전달된 파라미터를 넣어서 받아줘야 함수가 제대로 사용되는걸 알게되었다.

class CommentLikeAPIView(APIView):
    def post(self, request, comment_id, post_id):
        comment=get_object_or_404(PostComment, id=comment_id) # 좋아요 눌러서 어떻게 불러오는지 보자
        if request.user in comment.likes.all(): # 여기 all안쓰고는 못할까?
            comment.likes.remove(request.user)
            return Response("좋아요 취소",status=status.HTTP_200_OK)

        else:
            comment.likes.add(request.user)
            return Response("좋아요", status=status.HTTP_200_OK)