marshmallow로 직렬화와 비직렬화를 처리하기 전에 우리는 직렬화와 비직렬화가 무엇인지 알 필요가 있다.
직렬화란?
객체의 내용을 바이트 단위로 변환해 파일 or 네트워크를 통해 송수신이 가능하도록 만드는 것
비직렬화란?
직렬화된 파일을 다시 객체의 형태로 만드는 것
직렬화를 하는 이유?
시스템이 종료되어도 사라지지 않는 데이터이기에 메모리에만 상주되어 있는 객체 데이터를 영속화 해야할 때 사용됨
marshmallow Schema 클래스
dump_only : 역직렬화 중 건너뛸 필드, read_only(읽기 전용)
load_only : 직렬화 중 건너뛸 필드, write_only(쓰기 전용)
many : 오브젝트가 collection이면 True로 설정해야 객체가 리스트에 직렬화 된다
marshmallow - 직렬화

실습을 위해 위와 같이 가상환경을 만들고, 활성화 시켜준다. 그리고 serialization.py 파일을 만들어주면 된다. 이때 터미널에 pip list를 입력하면 pip, setuptools 만 있어야 한다.

다음과 같은 명령어로 marshmallow를 설치해준다.

그리곤 위와 같이 serialization.py에 필자는 animal class를 하나 정의 해줬다.

위와 같이 인자에 맞춰 데이터를 넣어주면 아래처럼 __dict__ 메소드를 이용해 객체 정보를 확인할 수 있다.


이거를 이제 딕셔너리에서 값을 얻어와 다시 딕셔너리의 값으로 넘기는 과정 ,직렬화를 json을 활용해 진행해보자.

다음과 같이 작업해줄 수도 있지만, 이렇게 되면 여러 데이터를 보내게 될 때 우리는 매우 아주 긴 코드를 짜게 될 것이고, 그 데이터의 양이 많아질 수록 현실에선 사용하기 어려운 코드가 될 것이다. 이를 해결 하기 위해 우리는 다음과 같이 해결할 수 있다.


import 작업후, 스카마 클래스를 상속 받아 animalSchema를 만들어준다.

그리고 스카마를 저장하고, dump()에 내가 원하는 데이터를 넣어주면

위처럼 데이터가 반환이 되는 것을 볼 수 있다.

그리고 json을 import 해줘 출력을 조금 바꿔준다면 json 형식으로 딕셔너리를 바꿀 수 있다.
marshmallow - 역직렬화

deserialization.py 파일을 만들어 위와 같은 내용을 import 해준다.

마저 코드를 작성해주면 되는데 JSON_animal_data 는 우리가 임시로 Json 형식으로 데이터를 받은 예시를 나타내준 것이다. 이 Json 데이터를 받아 스카마를 통해 data에 저장되고, 이를 animal_object로 받으면 역직렬화 과정을 진행할 수 있게 되는 것이다.
'파이썬 > 파이썬 플라스크' 카테고리의 다른 글
ep 10. flask로 instagram Clone 코딩 - 1 (0) | 2022.09.22 |
---|---|
ep 10. CORS, SSR, CSR이란? (0) | 2022.09.20 |
ep 8. Flask-RESTful 로 Car CRUD api 구축하기 (0) | 2022.08.29 |
ep 7. 간단한 HTTP API 구축해보기 (0) | 2022.08.24 |
ep 5. 관리자 페이지, 카테고리, 게시물 관리 (0) | 2022.07.29 |