화면:
urlpatterns = [
path('',MyPageView.as_view()),
] class MyPageView(views.APIView):
permission_classes = [IsAuthenticated] # 현재 로그인한 사람 가져오려면 필요
def get(self, request): # GET이니까
user=MyPageSerializer(request.user) # 유저 정보 시리얼라이저에 넣어서 가져오기_request.user는 현재 로그인한 user
return Response({'message': '마이페이지 조회 성공', 'data': {'user': user.data}}, status=status.HTTP_200_OK)
serializer: 시리얼라이저로 모델 중 사용할 정보를 가공한다고 생각
유저의 많은 정보중에 아이디 프로필 닉네임 관심사 팔로워만 필요해
class MyPageSerializer(serializers.ModelSerializer):
class Meta:
model=User
fields=['id','profile','nickname','interest','follow']
결과: 
잘 왔지만 interest랑 follow는 id만 오니까 형식에 맞게 추가
얘네는 account에 있는 시리얼라이져(중복이니까 가져다 쓰자(새로만들어도됨))

시리얼라이저
class MyPageSerializer(serializers.ModelSerializer):
follow=UserProfileSerializer(many=True, read_only=True)
interest=InterestSerializer(many=True, read_only=True)
class Meta:
model=User
fields=['id','profile','nickname','interest','follow']
결과:
이런식으로 북마크한 post도 가져오는것 한번 더 해보자면
view
class MyPageView(views.APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
# my 정보
user=MyPageSerializer(request.user)
# 북마크한 Post
book_user = request.user # 현재 사용자
book_posts= Post.objects.filter(bookmark=book_user.id) # 현재 사용자를 bookmark에 가지고 있는 Post객체들을 필터링해서 가져옴
for post in book_posts: # 이 Post들의 is_booked는 True.
post.is_booked=True # 이건 모델에 있는 정보가 아니라 우리가 상황에 따라 넘겨줘야 하는 정보니까 직접 적어준다
bookmarkPost = BookPostSerializer(book_posts, many=True) # BookPostSerializer에 Post객체 넣어서 시리얼라이저 형태에 맞게 만든다
return Response({'message': '마이페이지 조회 성공', 'data': {'user': user.data,'book_posts':bookmarkPost.data}}, status=status.HTTP_200_OK)
시리얼라이저에 넣기 전에 시리얼라이저에 있는 필드의 값을 만들어줄 수 있다. 따로 하거나 시리얼라이저(posts, is_booked=True)이런식으로
newQue.save(que_line=line,que_postsec=postsec,que_user=now_user) 이렇게 해도됐다. 얘네는 시리얼라이저에 없는 필드
manytomany 필드는 시리얼라이저에 넣은 다음(시리얼라이저 필드에는 x) add해주면 된다
serializer
class BookPostSerializer(serializers.ModelSerializer):
hashtag=InterestSerializer(many=True, read_only=True)
is_booked = serializers.BooleanField(default=False)
class Meta:
model=Post
fields=['post_id','title','post_image','diff','is_booked','hashtag']
그러면 어떻게 되느냐
{
"message": "마이페이지 조회 성공",
"data": {
"user": {
"id": 5,
"profile": "[이미지]",
"nickname": "토끼",
"interest": [
{
"hashtag": "운동"
},
{
"hashtag": "라이프"
}
],
"follow": [
{
"id": 1,
"nickname": "갓기사자",
"profile": "[type=file의 이미지]"
},
{
"id": 2,
"nickname": "갓기사자",
"profile": "[type=file의 이미지]"
},
{
"id": 4,
"nickname": "토끼토끼",
"profile": ""
}
]
},
"book_posts": [
{
"post_id": 1,
"title": "첫번째 게시물",
"post_image": null,
"diff": 1,
"is_booked": true,
"hashtag": [
{
"hashtag": "라이프"
}
]
}
]
}
}
끝!
원래 template → urls.py → views.py → model 이런느낌이었다면 (화살표는 관계지 개발 순서 의미X)
urls.py → views.py → serializer → model 느낌!
그래서 get할때도 ex 검색이면 검색어로 model에서 필터링해서 객체 가져오고, 그걸 다시 시리얼라이저로 처리해서 뷰에 넘겨주는 것..!