코딩 개발일지

blank와null 차이점? / 권한설정 방법 2가지 / serializer 꿀팁 본문

AI 본 교육/AI 7주차

blank와null 차이점? / 권한설정 방법 2가지 / serializer 꿀팁

호기호 2023. 9. 27. 21:17
  • blank 와 null 의 차이점 = " " 와 None


  • 권한 설정을 하는 여러 방법 중 2가지 소개

1. if 문을 이용해서 로그인한 사용자와 댓글만 사용자가 같을 때만 삭제가가능하도록 코드 짜기

    def delete(self, request, article_id, comment_id):
        comment = get_object_or_404(Comment, id=comment_id)
        if request.user == comment.user:
            comment.delete()
            return Response("삭제완료", status=status.HTTP_204_NO_CONTENT)
        else:
            return Response("권한이 없습니다!", status=status.HTTP_403_FORBIDDEN)

2. comment를 정의할 때, user=request.user 를 괄호안에 넣어줘서 아예 가져오는걸 같은user꺼만 가져오기

    def delete(self, request, article_id, comment_id):
        comment = get_object_or_404(Comment, id=comment_id, user=request.user)
        comment.delete()
        return Response("삭제완료", status=status.HTTP_204_NO_CONTENT)

  • serializer에서 생성 / 수정 구분법?

post/ / put 했을때, serializer( ) 에서 괄호안에 어떤걸 넣느냐를 보면 바로 알 수 있다.

아래는 post를 받고, data=request.data를 넣었다.

    def post(self, request):
        serializer = ArticleCreateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

아래는 put을 받고, article과 data=request.data를 넣었다. article을 넣어줌으로써, 해당 article을 가져와서 save하는 개념이기때문에, 수정하기가 되는것이다.

 

원하는 article을 serializer를 이용해서 코드를 짜고싶을땐, article을 넣어주면 된다는 뜻이므로 다른 기능을 구현할 때 응용할 수 있을 것이다.

    def put(self, request, article_id):
        article = get_object_or_404(Article, id=article_id)
        if request.user == article.user:
            serializer = ArticleCreateSerializer(article, 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("권한이 없습니다!", status=status.HTTP_403_FORBIDDEN)