59.Django(장고) - ecommerce 프로젝트 - DRF - 시리얼라이저 이해 및 예제

JungSik Heo·2024년 12월 19일

1. Serilaizer

  • Serilaize(직렬화): 모델 인스턴스나 QuerySet과 같은 데이터를 JSON 형식의 파일로 변환하는 작업

  • Deserialize(역직렬화): JSON 형식의 데이터를 정의된 포맷에 맞추어 다시 모델 인스턴스로 변환하는 작업

  • Serializer: Serialize, Deserilaize 같은 작업을 진행한다
    • 일반적으로 API 서버에서는 JSON 형태로 데이터를 주고 받는다
    • RESTful API에서 데이터를 전송할 때 자주 사용된다

2. Serilaizer 객체의 주요 기능

  1. serialization
  2. deserialiaztion
  3. validation
  4. request / response 데이터 핸들링 ( to_internal_value() / to_representation() )
  5. nested serialization

주요 기능들은 위와 같고 더 세세히 파고들면 더 많은 기능들이 있다.

위의 주요 기능을 그림으로 표현하면...

3.🤔 Serializer & ModelSerializer

✔️ Serializer와 ModelSerializer는 Django의 Form과 ModelForm와 유사하다.

# forms.py(ModelForm 사용시)
from django.forms import ModelForm
from .models import Post
class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = '__all__'
# serializers.py(ModelSerializer 사용 시)
from rest_framework.serializers import ModelSerializer
from .models import Post
class PostSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

✔️ 서로의 공통점으로는 필드 지정 및 모델로부터 읽어올 수 있고, 입력된 데이터에 대한 유효성 검사를 진행한다.

✔️ 차이점으로는 Form과 ModelForm는 form 태그가 포함된 HTML을 생성하지만, Serializer와 ModelSerializer는 form 데이터가 포함된 JSON 타입의 문자열을 생성한다.

Serializer & ModelSerializer과의 차이점

4.예제

api\serializers.py

from rest_framework import serializers
from store.models import Product


#def_49 serializers.py 생성
class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = "__all__"  #fields = [ "id", "name", "price", "category", "is_sale","sale_price"]

api\urls.py

urlpatterns = [
(생략)
    path("products/", api_products), #dev_49
]

api\views.py

#def_49
@api_view(['GET'])
def api_products(request):
    products = Product.objects.all()
    serializer = ProductSerializer(products,many=True)
    return Response(serializer.data)

profile
쿵스보이(얼짱뮤지션)

0개의 댓글