본문이 필요없는 POST 요청

2024년 11월 22일 금요일

Today I Learned

날짜

2024년 11월 22일 금요일

내용

장고에서 요청 본문 설정하기

인스타그램에서 게시글을 가져오고 있다. 이것저것 만들면서 엔드포인트를 만들어야 하는데.. 내가 원하는대로 되질 않는다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class InstagramFeed__InstagramFeedPostSerializer(serializers.ModelSerializer):

    class Meta:
        model = ...
        fields = "__all__"

class ...View(BaseAPIViewMixin, APIView):
    def get_serializer_class(self):
        return ..._Serializer

    @extend_schema(
        operation_id=...,
        description=...,
        tags=...,
    )
    def post(self, request: Request, shop_id: int):
        try:
            account_data = ..
            instagram_posts = ...
	          serializer = self.get_serializr(instagram_posts, many=True)
	          return Response(
                {
                    "result": True,
                    "detail": serializer.data,
                }
            )
        except Exception as e:
            return Response({"result": False, "detail": str(e)})

이렇게 해놨는데.. 저 InstagramFeedPost 가 반환되는 형태라고 가져다 놨더니 요청의 본문 바디에 저게 들어가고 앉았다. FastAPI에선 직렬화와 역직렬화는 신경쓰지 않아도 됐었다보니, 제대로 못쓰고 있는 것 같다. 게다가 응답도 객체 배열이어야 하는데, 그냥 객체로만 처리되고 있다.

오늘도 친절한 이웃께 도움을 요청하여 해결하였다. 난 extend_schema 가 그냥 각주 쯤의 역할인줄 알았더니 저 친구가 이 엔드포인트의 동작에 많은 기여를 한다.

  1. 응답 요청 본문이 필요없다는걸 명시해주고
  2. 응답이 객체 배열임을 알려주면 된다.
1
2
3
4
5
6
7
@extend_schema(
        operation_id="...",
        description="...",
        tags=...,
        request=None,
        responses=..._Serializer(many=True),
    )

EZ.

회고

이제 제법 속도가 붙는다!