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
3
4
5
6
7
@extend_schema(
operation_id="...",
description="...",
tags=...,
request=None,
responses=..._Serializer(many=True),
)
EZ.
회고
이제 제법 속도가 붙는다!