Serializer 란?
Serializer(직렬화) : Django 객체 (Object, Queryset) => JSON 등의 데이터로 변환
DeSerializer(역직렬화) : JSON 등의 데이터 => Django의 객체(Object, Queryset) 변환
👉 Serializer 예시
- GET 요청 : DB => Queryset (Model) => OrderedDict(ReturnDict) => JSON 응답
👉 DeSerializer 예시
- POST 요청 : JSON => OrderedDict(ReturnDict) => Queryset (Model) => DB
DRF Serializer 특징
1. DRF Serializer는 Django의 Form, ModelForm과 유사하다.
2. 기본형 Serializer, ListSerializer와 Model 기반의 ModelSerializer를 제공
3. 기본형 Serializer, ListSerializer에서는 Create, Update 을 오버라이딩 하여 사용
4. ModelSerializer는 Create(), Update() 메소드가 기본적으로 제공되어, 세부 구현이 필요하지 않다면 정의할 필요가 없음
5. validate(), validate_<field명>() 을 통해 직렬화 과정에서 데이터 검증 가능
Serializer vs ModelSerializer vs ListSerializer 모듈 비교
Serializer | ModelSerializer | ListSerializer | |
상속 클래스 | BaseSerializer | Serializer | BaseSerializer |
용도 | Object 직렬화 | Model 기반 직렬화 | Queryset 직렬화 |
추가 구현 | Model 선언 필수 create(), update() 구현 필수 |
Model 선언 필요시만 create(), update() 구현 필요시만 |
Model 선언 필수 create(), update() 구현 필수 many=True |
Serializer 관련 메소드, 인자 정리
Views.py - Serializer 인자 정리
- many = True : 여러 object serializer 적용시
- partial = True : 필수 필드외에 수정할 필드만 넣어주기 위함
- serializer.is_valid(raise_exception=True) : validation간 에러 발생시 400 Response
- serializer.save() : 내부적으로 serializer의 create() 호출 (is_valid 사전에 진행 필수)
- serializer.update() : 내부적으로 serializer의 update() 호출 (is_valid 사전에 진행 필수).
Serializers.py - Serializer 객체 선언
- def create(self, validated_data) : 데이터 생성(저장)시
- def update(self, obj, validated_data) : 데이터 수정 저장시
- def validate_<field명> : validation시 특정 필드만
- def validate(self, data) : validation 여러 필드
- class Meta - read_only_fields : 읽기에만 사용되는 Field / read_only=True 도 가능
- class Meta - extra_kwargs : 추가 키워드 지정 ex) {'pwd' : {'write_only';True}}
- class Meta - methodfields : 필드 재정의시 사용 ex) 연관필드의 id 대신 name을 주 값으로 직렬화 하고 싶을 때
참고 문헌
- https://www.django-rest-framework.org/api-guide/serializers/
- https://www.lostcatbox.com/2021/01/19/django-serializer/
- https://www.django-rest-framework.org/api-guide/serializers/
- https://devkor.tistory.com/entry/03-Django-Rest-Framework-Serializer-View-%EA%B0%9C%EB%85%90-%EC%9D%B5%ED%9E%88%EA%B8%B0
'Python > DRF' 카테고리의 다른 글
[DRF] 간단한 캐싱 기능 구현 하기 (by. redis, DRF) (0) | 2022.11.19 |
---|---|
[DRF] DRF Pagination (by. CursorPagination) (0) | 2022.11.10 |
[DRF] DRF Pagination (by. LimitOffsetPagination) (0) | 2022.11.10 |
[DRF] DRF Pagination (by. PageNumberPagination) (0) | 2022.11.10 |