반응형
[DRF] Serializers - 객체 역직렬화 하기
원문 의 내용 중 해석이 애매한 부분은 그대로 표기하였고, 복잡한 문장은 의역하여서 정리하였습니다
역직렬화도 비슷하다. 첫번째로는 stream을 Python native datatype으로 파싱한다.
x
import io
from rest_framework.parsers import JSONParser
stream = io.BytesIO(json)
data = JSONParser().parse(stream)
그리고 나서 우리는 네이티브 데이터 타입을 복원한다 - 검증된 사전 데이터
x
serializer = CommentSerializer(data=data)
serializer.is_valid()
# True
serializer.validated_data
# {'content': 'foo bar', 'email': 'leila@example.com', 'created': datetime.datetime(2012, 08, 22, 16, 20, 09, 822243)}
내 마음대로 해설
역직렬화는 직렬화의 과정의 반대로 진행되는데 위 예제에서는 stream 형태로 들어왔을때, JSONParser를 이용하여서 파이썬 네이티브 데이터타입으로 변경하는 것을 보여준다.
그리고 나서는 CommentSerializer(data=data)
를 해주는데, 이전에 보았던 CommentSerializer(data)
과는 다르다.
BaseSerializer
클래스의 doc string을 보면 아래와 같다.
x
class BaseSerializer(Field):
"""
...
In particular, if a `data=` argument is passed then:
.is_valid() - Available.
.initial_data - Available.
.validated_data - Only available after calling `is_valid()`
.errors - Only available after calling `is_valid()`
.data - Only available after calling `is_valid()`
If a `data=` argument is not passed then:
.is_valid() - Not available.
.initial_data - Not available.
.validated_data - Not available.
.errors - Not available.
.data - Available.
"""
...
data=
이 붙고 안붙고에 대해서 이용 가능한 메소드 목록이 다른데, data=
을 붙인다면, 위에 표시된 메소드들을 이용가능한데 전부 외부로 부터 들어온 데이터에 대해서 검증과 관련 된 메서드드들이다. 즉, 외부에서 부터 들어오는 데이터에 대해서 유효성 검증이 필요할 때는 data=
를 쓰면된다. 위의 예제에는 stream 형태로 외부로 부터 들어온 것을 가정하였기 때문에 위 예제가 data=
을 써주어서 유효성 검사(is_valid) 해주는 것이 맞다.
결론
역직렬화
- stream -> python data types -> serializer.validated_data
반응형
'개발 > 장고' 카테고리의 다른 글
[해설과 함께 읽는 Django 문서] Models - 파일 간 모델 (0) | 2021.01.31 |
---|---|
[해설과 함께 읽는 Django 문서] Models - 일대일 관계 (0) | 2021.01.31 |
[DRF] Serializers - 객체 직렬화 하기 (0) | 2021.01.31 |
[DRF] Serializers - Serializers 클래스 선언하기 (0) | 2021.01.31 |
[DRF] Serializers - 개요 (0) | 2021.01.31 |