본문 바로가기
Library&Framework/Django

[Django기초] 직렬화(Serialization), 역직렬화(Deserialization)는 django에서 어디에 적용되었는가??

by 우지uz 2023. 4. 22.

권기현 튜터님의 Django drf강의를 들으며
게시글에 대한 CRUD를 작성하고 있는데 

과연 어떤부분에서 직렬화(Serialization) 와 역직렬화(Deserialization)가 적용된 건지 궁금했습니다!

https://onlyfor-me-blog.tistory.com/494에서 기본적인 개념을 이해할 수 있었고

제가 작성한 코드에서도 직렬화와 역직렬화를 했다는 것을 
코드를 보며 이해했습니다. 

class ArticleDetail(APIView):
    def get(self, request, article_id, format=None):
        article = get_object_or_404(Article, id=article_id)
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

    def put(self, request, article_id, format=None):
        article = get_object_or_404(Article, id=article_id)
        serializer = ArticleSerializer(article, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
이 코드에서 get 함수는,

"직렬화를 통해"
db에 있는 article데이터를
ArticleSerializer 클래스로 직렬화해서
JSON 데이터로 Response(serializer.data)
반환했다는 것을 알게됐습니다. 

쉽게 말하자면, GET 함수를 통해서 
데이터베이스에 저장되어 있는 

Article 인스턴스를
클라이언트에게 보여주기 위해서
ArticleSerializer로 직렬화 했다는 내용입니다!

 

이 코드에서 put 함수는,

"역직렬화를 통해"

id=article_id를 만족하는 Article을 가져온 후에
ArticleSerializer를 통해서 request.data에 있는 JSON데이터를
역직렬화 해서, 이를 반대로 파이썬 Article 객체 데이터로
변환한다는 것을 알게 됐습니다.


GET함수에서 ArticleSerializer의 인자(article)와
PUT함수에서 ArticleSerializer의 인자(Article, id=article_id)가 
서로 다르다는 것을 알 수 있습니다! 

 

그리고 if serializer.is_valid():메소드를 호출해서
데이터 유효성 검사를 하고, 통과한 경우에는 
serializer.save()메소드로 Article 인스턴스를
데이터베이스에 저장한다는 것을 이해했네요 ㅎㅎ

제가 작성한 코드에서
직렬화, 역직렬화가 되지 않았을까?? 
라는 질문에서

이렇게 이해하는 과정을 겪게 되어서 
굉장히 뿌듯합니다.