serializer
를 이용하면 Django Model이나 QuerySet을 직렬화하여 쉽게 python data 형식으로 변환할 수 있으며 역직렬화를 통해 데이터를 다시 Model instance와 같은 복잡한 데이터로 만들 수 있다.
많은 사용 방법이 있겠지만 쉽게 말하자면
object
를json
형태로 바꿔주거나, 그 반대로json
형태의 데이터로object
를 생성하는
serializers.ModelSerializer
를 이용한 일종의 번역기 같은 역할이라고 생각하자.
ex)
- 유저 정보 조회
서버의 DB에 저장되어있는 유저 객체 데이터(object
)를serializer
에 넣으면 클라이언트에서 확인할수있는json
데이터로 변환된다.
- 유저 생성
클라이언트에서 보낸json
데이터의 유저 정보를serializer
에 넣어서 새로운 유저 객체 데이터(object
)로 DB에 저장한다.
앞선 예시와 같이 유저 정보 조회 및 유저 생성 API에 Serializers를 적용시켜보자.
1-1) Serializers 정의
# user/serializers.py from rest_framework import serializers from user.models import User as UserModel class UserModelSerializer(serializers.ModelSerializer): """ 유저 모델 Serializer """ class Meta: model = UserModel fields = "__all__" extra_kwargs = { 'password': {'write_only': True} }
1-2) View에 Serializers 적용
# user/views.py from rest_framework import status from rest_framework.views import APIView from rest_framework.response import Response from user.models import User as UserModel from user.serializers import UserModelSerializer # 유저 View class UserView(APIView): # 유저 정보 조회 def get(self, ruquest, username): user_obj = UserModel.objects.get(username=username) user_info = UserModelSerializer(user_obj).data return Response(user_info, status=status.HTTP_200_OK)
1-3) Postman으로 Response 확인
2-1) Postman으로 유저 정보 전달
2-2) View에서 Serialzers로 유저 객체 생성
# user/views.py from rest_framework import status from rest_framework.views import APIView from rest_framework.response import Response from user.models import User as UserModel from user.serializers import UserModelSerializer # 유저 View class UserView(APIView): # 유저 정보 조회 def get(self, request, username): ... # 유저 생성 def post(self, request): user_info = request.data serializer = UserModelSerializer(data=user_info) serializer.is_valid() serializer.save() return Response(serializer.data, status=status.HTTP_200_OK)
2-3) Postman으로 확인
- 유저 정보 조회 시 유저 객체 데이터가 가진 속성 이외의 정보도 알고 싶다면 어떻게해야할까?
ex) 유저가 가진 게시글 개수
- 유저 생성 시 유저 정보가 유효한지 어떻게 검증할까?
ex) 유저 아이디가 겹칠 경우 에러 발생 시
- 유저 생성 시 비밀번호는 어떻게 해시할까?
- 현재 비밀번호는 문자열 그대로 저장되고 있지만 보안상 해시할 필요가 있다.
- 유저 정보를 수정하고 싶을 때도 Serializers를 이용할 수 있을까?
해당 고려사항에 대해서는 다음 포스팅에서 알아보도록 하자