Python/DRF

[DRF] Serializer 특징, 모듈(메소드, 인자) 비교

yubi5050 2023. 2. 11. 18:37

Serializer 란?

Serializer(직렬화) : Django 객체 (Object, Queryset) => JSON 등의 데이터로 변환

DeSerializer(역직렬화) : JSON 등의 데이터 => Django의 객체(Object, Queryset) 변환

 

Django 데이터 변환 Flow

👉 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을 주 값으로 직렬화 하고 싶을 때

 

참고 문헌