오운완 프로젝트에서 backend comment CRUD 부분을 완성했다.
강의를 참고하며 만들었기 때문에 크게 어려운 부분은 없었지만 따로 수정해야 할 부분이 있어서 기록으로 남기려고 한다.
class CommentDetailView(APIView):
def put(self, request, article_id, comment_id):
comment = get_object_or_404(Comment, id = comment_id)
if request.user == comment.user:
serializer = CommentCreateSerializer(comment, data=request.data)
if serializer.save():
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response("자신의 댓글만 수정할 수 있습니다", status=status.HTTP_403_FORBIDDEN)
이 코드는 특정 댓글을 수정하는 기능을 가지고 있다. comment 작성자 본인일 때만 수정이 가능하도록 구성하였다.
하지만 예외처리를 해주지 않아서 실제 서버로 돌리게 되면 치명적인 오류가 발생 할 수 있다.
class CommentDetailView(APIView):
def put(self, request, article_id, comment_id):
try :
comment = Comment.objects.get(id=comment_id)
except Comment.DoesNotExist:
return Response({"message":"댓글이 없습니다."}, status=status.HTTP_404_NOT_FOUND)
if request.user == comment.user:
serializer = CommentCreateSerializer(comment, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response({"message":"자신의 댓글만 수정할 수 있습니다."}, status=status.HTTP_403_FORBIDDEN)
try except 구문을 이용해서 댓글이 존재하지 않을 경우를 예외처리 해주었다.
수정뿐만 아니라 삭제를 할 때도 댓글이 존재하는지 부터 확인해야 하기 때문에 해당 코드를 넣어주었다.
실제 배포를 염두하고 하다보니 꼼꼼하게 했다고 생각했음에도 불구하고 느끼지 못한 세세한 부분이 많다고 생각되었다.
앞으로 더 유의해서 작업하는 계기가 되었다.
가보자고!!