오늘도 달려보자 언젠간 bottom to top
[ Clover, La Vida Loca 중에서 ]
Django 의 화려한 본 모습을 목격한 다음날 부터 본격적으로 DRF에 대한 공부가 시작되었다. 사수님이 본인 계정으로 DRF 온라인 강의를 수강해주셔서 DRF공식문서와 함께 병행하며 튜토리얼 뽀개기를 시작했다. 그리고 앞으로 백엔드가 하게 될 업무에 대해서도 설명을 들었는데, 현재 개발중인 프로젝트에서 관리자(admin page)와 유저(User page)가 있는데 관리자 페이지는 만들어진 코드가 거의 없어서 처음부터 손대야하는 상황이고 유저 페이지는 베타 서비스 중이라 히스토리는 있지만 버그가 많다고 했다. 사수 두 분과 논의 끝에 나는 관리자 페이지를 맡게 되었다
알아듣기 힘든 인도 강사의 발음, 더 알아보기 힘든 구글번역기와 사투를 해야 했지만, 강의 내용과 공식문서의 튜토리얼이 워낙 잘 되어 있어서 어렵지만 조금씩 눈에 들어오기 시작했다. 그리고 기업협업간 벨로그는 일기&TIL 형태로 작성 해 나갈 계획이다.
free 한 사무실 분위기는 다소 적막했지만 특별한 제약사항들이 없어서 집중하기에도 좋고, 원할때 마음대로 쉬어도 되어서 상당히 좋았다. 미국 회사 생활을 해본 나로써 그닥 다를 바 없는 분위기였다. 위워크에서 최상의 업무환경을 영위하다가 갑자기 이런 공간에 오게 되면 당황하거나 적응이 힘든 분들이 많은데, 그냥 내 입장에선 어리광이지 않나 싶을 뿐이다. 타고난 금수저 아니고서야 시설, 설비, 장비 풀세팅 된 공간에서 받고 싶은만큼 받아가며 근무한다? 그런건 영화고 드라마고 소설이며 공상이다. 현실비하가 아닌 실제를 직시하고 인정하는 것이 내가 배운 첫 번째 삶의 지혜였다.
serializers.py
class SnippetSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(required=False, allow_blank=True, max_length=100)
code = serializers.CharField(style={'base_template':'textarea.html'})
linenos = serializers.BooleanField(required=False)
language = serializers.ChoiceField(choices=LANGUAGE_CHOICES)
style = serializers.ChoiceField(choices=STYLE_CHOICES)
---------------------------------------------------------------------------------
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ['id', 'title', 'code', 'linenos', 'language', 'style']
※ models.py 의 모델을 직렬화(serializing) 하여 model name과 fields name 을 따로 지정해 줄 수 있고, 기획에 맞게 로직 커스터마이징도 가능하며, 가독성도 높아진다.
decorator
를 사용하기 간편하다.@api_view(['GET', 'POST'])
def movie_list(request):
if request.method == 'GET':
movies = Movie.objects.all()
serializer = MovieSerializer(movies, many=True)
return Response(serializer.data)
if request.method == 'POST':
serializer = MovieSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
decorator
를 사용하려면 추가 가져오기 또는 메소드 재정의가 필요하다.class MovieListAV(APIView):
def get(self, request):
movies = Movie.objects.all()
serializer = MovieSerializer(movies, many=True)
return Response(serializer.data)
def post(self, request):
serializer = MovieSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
serializers.Serializer
로 상속받게 되면 아래와 같이 유효성 검사에 대한 로직을 정의 해 줘야 한다.serializers.py
class MovieSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField()
description = serializers.CharField()
active = serializers.BooleanField()
def create(self, validated_data):
return Movie.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.description = validated_data.get('description', instance.description)
instance.active = validated_data.get('active', instance.active)
instance.save()
return instance
※ instance 와 validated_data 의 속성
def update(self, instance, validated_data):
-> instance(old value), validated_data(new value)
serializers.ModelSerializer
로 상속받게 되면 아래와 같이 구현 할 수 있다.class MovieSerializer(serializers.ModelSerializer):
(생략)
def validators(self):
return super().validators
실패해도 좋아 멈추지마 alright.(Please don't ever let you down)
[ Clover, La Vida Loca 중에서 ]