본문으로 바로가기

DRF | AWS | serializer 활용, 이해

category TIL 2022. 10. 31. 22:09

 

# views.py
class ArticleView(APIView):
    def get(self, request): # 전체 리스트 먼저 생각해보면 모든걸 들고온다 404 or get.all
        articles=Article.objects.all()
        serializer = ArticleSerializer(articles, many=True) #사용자에게 보여준다 serial 필요 만들어줌 뭐보여줄지 정해줄수도 있음
        return Response(serializer.data, status=status.HTTP_200_OK)
    def post(self, request): # 생성
        pass

처음엔 class형 view 를 만들면서 각각의 메소드를 어디에 사용할지 생각을 했다.

user가 get을 요청하면 user에게 보여줄 정보는 게시글의 리스트였고 모든 리스트를 articles로 들고오고 serializer로 사용자에게 보여주게 했다.

[
    {
        "id": 1,
        "title": "게시물 추가요",
        "content": "ㅊㅋㅊㅋ",
        "image": "/media/IMG_4540.JPG",
        "created_at": "2022-10-31T11:40:16.029436Z",
        "updated_at": "2022-10-31T11:40:16.029468Z",
        "user": 8
    },
    {
        "id": 2,
        "title": "123",
        "content": "123",
        "image": "/media/2022/10/IMG_4874.JPG",
        "created_at": "2022-10-31T12:06:39.452559Z",
        "updated_at": "2022-10-31T12:06:39.452577Z",
        "user": 7
    }
]

직렬화된 JSON형태로 보내지는걸 확인 할 수 있었다 하지만 여기서 내가 보내고싶은 정보를 따로 정해주기위해서는 필요한 serializer를 다시 만들어 줄 필요가 있었다.

# views에서 ArticleView get보니까 serialize 필요하네
class ArticleListSerializer(serializers.ModelSerializer):
    class Meta:
        model=Article
        fields = ("pk","title","image","updated_at","user")
내가 원하는 정보만 주기위해서 ArticleListSerializer 새로 만들어주고 fields를 정해줬다.
class ArticleView(APIView):
    def get(self, request): # 전체 리스트 먼저 생각해보면 모든걸 들고온다 404 or get.all
        articles=Article.objects.all()
        serializer = ArticleListSerializer(articles, many=True) #사용자에게 보여준다 serial 필요 만들어줌 뭐보여줄지 정해줄수도 있음
        return Response(serializer.data, status=status.HTTP_200_OK)
    def post(self, request): # 생성
        pass

serializer를 바꿔주고 포스트맨으로 get한 결과는

[
    {
        "pk": 1,
        "title": "게시물 추가요",
        "image": "/media/IMG_4540.JPG",
        "updated_at": "2022-10-31T11:40:16.029468Z",
        "user": 8
    },
    {
        "pk": 2,
        "title": "123",
        "image": "/media/2022/10/IMG_4874.JPG",
        "updated_at": "2022-10-31T12:06:39.452577Z",
        "user": 7
    }
]

content를 없앤 보내고 싶던 정보만 보내지는걸 확인할 수 있었다.