DRF - Serializers [1]

Dongwoo Kim·2022년 10월 6일
0

DRF

목록 보기
7/9
post-custom-banner

1. Serializers

serializer를 이용하면 Django Model이나 QuerySet을 직렬화하여 쉽게 python data 형식으로 변환할 수 있으며 역직렬화를 통해 데이터를 다시 Model instance와 같은 복잡한 데이터로 만들 수 있다.

많은 사용 방법이 있겠지만 쉽게 말하자면

  • objectjson형태로 바꿔주거나, 그 반대로
  • json 형태의 데이터로 object를 생성하는

serializers.ModelSerializer를 이용한 일종의 번역기 같은 역할이라고 생각하자.

ex)

  • 유저 정보 조회
    서버의 DB에 저장되어있는 유저 객체 데이터(object)를 serializer에 넣으면 클라이언트에서 확인할수있는 json 데이터로 변환된다.
  • 유저 생성
    클라이언트에서 보낸 json 데이터의 유저 정보를 serializer에 넣어서 새로운 유저 객체 데이터(object)로 DB에 저장한다.

2. Serializers 적용하기

앞선 예시와 같이 유저 정보 조회 및 유저 생성 API에 Serializers를 적용시켜보자.

1) 유저 정보 조회

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) 유저 생성

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으로 확인


3. 추가 고려사항

  1. 유저 정보 조회 시 유저 객체 데이터가 가진 속성 이외의 정보도 알고 싶다면 어떻게해야할까?
    ex) 유저가 가진 게시글 개수
  1. 유저 생성 시 유저 정보가 유효한지 어떻게 검증할까?
    ex) 유저 아이디가 겹칠 경우 에러 발생 시
  1. 유저 생성 시 비밀번호는 어떻게 해시할까?
    • 현재 비밀번호는 문자열 그대로 저장되고 있지만 보안상 해시할 필요가 있다.
  1. 유저 정보를 수정하고 싶을 때도 Serializers를 이용할 수 있을까?

해당 고려사항에 대해서는 다음 포스팅에서 알아보도록 하자

참고

profile
kimphysicsman
post-custom-banner

0개의 댓글