TIL Day 61.

Jen Devver·2024년 5월 10일

내배캠 TIL

목록 보기
68/91

Django 심화 프로젝트

오늘의 문제 해결

  • 시리얼라이저에 필드를 추가해서 분기에 따라 다르게 넘겨주고 싶을 때
    : userpage 접근 시 로그인한 사용자 본인의 페이지를 보는 것과 다른 회원의 페이지를 보는 것을 구분하고자 함
  • 해결: 시리얼라이저를 상속받아 추가해주는 방법으로 코드의 반복을 피함.

serializers.py

from rest_framework import serializers
from django.contrib.auth import get_user_model

class OtherUserSerializer(serializers.ModelSerializer):
	class Meta:
    	model=get_user_model()
        fields = ["id", "username", "date_joined", "introduction"]
    
    def to_representation(self, instance):
    	ret = super().to_representation(instance)
        ret["user_contents_url"] = f"api/content/?user={instance.id}"
        ret["user_comments_url"] = f"api/content/comment/?user={instance.id}"
        ret["favorite_contents_url] = f"api/content/?favorite-by={instance.id}"
        return ret
        
# 여기에서 OtherUserSerializer를 상속받아 새로운 시리얼라이저를 생성

class UserSerializer(OtherUserSerializer):
	### 유저 본인의 페이지를 조회할 때 좋아요를 누른 글과 댓글이 보여야 하므로 상속한 것에 추가해 줌.
    def to_representation(self, instance):
    	ret = super().to_representation(instance)
        ret["liked_contents_url"] = f"api/content/?liked-by={instance.id}"
        ret["liked_comments_url"] = f"api/content/comment/?liked-by={instance.id}"

views.py

...
from .serializers import UserSerializer, OtherUserSerializer

class UserPageAPIView(APIView):
	def get(self, request, username):
    	user = get_object_or_404(get_user_model(), username=username)
        # 분기 처리
        if request.user == user:
        	serializer = UserSerializer(user)
        else:
        	serializer = OtherUserSerializer(user)
        return Response(serializer.data)

추가로 내가 구현하지 않은 부분은 팀장님 코드리뷰를 보면서 fork한 레포에 주석으로 정리해 둠

KPT 회고

Keep

  • 주석을 적어가면서 하니 나도 다시 검토할 때 훨씬 이해하기 쉽고 다른 사람이 볼 때도 알아보기 편한 장점이 있음.
  • 하나의 세부적인 기능이 될 때마다 postman으로 잘 구현이 되었는지 확인함.
  • 계속 깃 커밋을 넣어가면서 작업함.

Problem

  • 공식 문서를 참고하고는 있으나 시간에 쫓겨 마음이 급하다보니 꼼꼼히 읽지 못하고 대충 보게 됨.
  • 강의에 나오지 않은 부분을 맞닥뜨릴 때 어떤 방향으로 진행해야 하는지 갈피를 잡지 못함.
  • 쓰는 코드에 대한 완벽한 숙지가 되어있지 않음.
  • 추가 기능을 구현해보지 못함.

TRY

  • django 심화 프로젝트 강의 복습 및 한 눈에 보기 쉽게 정리 필요할 듯.
  • 기본 개념 다시 복습 (인스턴스, ORM, ...)
  • 비밀번호 검토 기능 추가 시도
profile
발전 중...

0개의 댓글