[Django] 3. User 모델 생성(2) - Serializer

김성산·2020년 11월 15일
1

안녕하세요 레오입니다!🤗 밤은 깊었는데 잠이 오지를 않네요.😳😳 이럴 때 기술 블로그 몇 자 적다보면 이내 스르르 눈꺼풀이 무거워질 듯 해서 호다닥 글을 써내려가보도록 하겠습니다ㅎㅎ 지난 포스트인 Model편에 이어서 작성하기 때문에 지난 포스트를 꼭 보시고 이번 포스트를 봐주시기 바랍니다! 이번 포스트에서는 DRF의 꽃 시리얼라이저에 대해서 작성해보려고 합니다.

Serializer란?

시리얼라이저는 장고에서 쓸 수 있는 독특한 기능 중 하나입니다. 장고 튜토리얼로 학습하다보면 MTV가 한번에 상호작용하는 것을 볼 수 있습니다. 'Model'로 테이블을 정의하고 'View'로 컨트롤한 뒤 'Template'에서 html과 css 등을 이용하여 웹 페이지를 구현합니다. 하지만 이 방식은 하나의 서버를 통해서 구현되기때문에 에러가 나면 모두 먹통이 되거나 트래픽 초과를 야기시키는 등 문제가 많습니다.🤔🤔

따라서 보통은 프론트엔드와 백엔드를 나누어서 진행을 하고 이번 프로젝트는 프론트엔드 파트인 뷰.js와 백엔드 파트인 장고로 나누어져 있습니다. 이에 따라 두 개의 서버가 서로 데이터를 주고받으면서 통신을 하는데, 주고받는 데이터는 대체로 포맷이 정해져 있습니다. xml 또는 json을 이용하는데, REST API에서는 대부분 json 파일을 이용 합니다. 하지만 파이썬은 내부에서 데이터를 읽고 쓸 때 json타입이 아닌 파이썬의 표준 타입을 사용합니다. 그래서 json 형식의 데이터를 파이썬이 읽어낼 수 있는 타입으로 형 변환을 시켜주는 것이 시리얼라이저의 역할입니다. 장고의 시리얼라이저는 형 변환 이외에도 다양한 기능이 있으니 한번 심도있게 공부해보시는 것을 추천드립니당!

User Serializer

먼저 DRF를 설치하여야 합니다.

(django_venv)$ pip3 install djangorestframework

콘솔에서 위의 명령어로 설치할 수 있습니다. 이번 포스트에서 작성된 시리얼라이저는 회원가입API를 위한 시리얼라이저입니다.

코드는 다음과 같습니다.

from rest_framework import serializers

from .models import User

class UserRegistrationSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = User
        fields = ('email', 'password', 'nickname')
        extra_kwargs = {"password": {"write_only":True}}
    
    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        
        return user

serializers의 ModelSerializer라는 클래스를 상속받아 사용합니다.

  • class Meta: Serializer가 사용될 정보들을 정의하는 곳입니다.
  • model: 참조할 모델을 정의합니다.
  • fields: Serialize할 필드들을 정의합니다. 모든 필드를 serialize할 때는 ('__all__')을 사용합니다.
  • extra_kwargs: 기타 적용할 특성들을 정의합니다.

더욱 자세한 코드를 파헤치고 싶으신 분은 'DRF 깃허브 문서👉보물창고' 에서 확인할 수 있습니다!

프론트엔드 서버에서 백엔드서버로 이메일, 패스워드, 닉네임이 포함된 json파일 형식을 보내기로 정하였습니다. 따라서 시리얼라이저에서 serialize할 필드는 email, password, nickname 필드입니다. create 함수는 이후 View편에서 자세하게 다룰 예정인데, create 함수가 호출되면 이전 포스트인 Model편에서 만들었던 create_user 함수를 실행합니다. validated_data는 serializer에서 제공하는 유효성 검사를 마친 데이터입니다.

이번 포스트에서는 코드가 꽤 단순하기도 하고, 시리얼라이저를 소개하는 성격이 강해서(절~~~대 졸린 것 아닙니당😪😪) 다소 짧은 글을 마치려 합니다. Model/Serializer/View 세 파트로 깔끔한 포스팅을 위한 것이니 너그러이 양해 부탁드립니당ㅎㅎ 그럼 다음 포스트에서 뵙겠습니다!

profile
비단같은 마음씨

0개의 댓글