요즘 바빠서 블로그 글쓰는걸 까먹고 있다가 오늘 삽질을 너무 오래해서 글을 하나 쓴다.
1. 문제 상황
스웨거와 리독을 자동으로 연결 해놨는데 CBV 기반의 코드들만 request example과 response example 이 안뜨는 것을 확인했다.
정상 상황
문제 상황
보면 오른쪽 까만 화면에 에제 데이터가 떠야 되는데 안뜸을 알 수 있다.
2. 해결 방법
2-1. Response samples 만들기
- 우선 swagger_auto_schema와 openapi를 import 한다.
- 예제 데이터가 담긴 response_schema_dict(예시 이름) 을 만든다
- 아래 코드의 "key" : "value" 란에 예제 데이터를 담으면 된다.
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
response_schema_dict = {
"200": openapi.Response(
description="사용자가 좋아요 한 브랜드의 이벤트를 보여준다.",
examples={
"application/json": {
"key": "value"
}
}
)
}
- 이후 만든 View의 함수 위에 @swagger_auto_schema를 선언하고 response = 예제 데이터를 담아준다.
- 이때 APIView 를 상속받아야 swagger 에 뜬다!!!!!!!!! 완전 중요
class 어쩌구View(APIView)
@swagger_auto_schema(responses=response_schema_dict)
def post(self, request):
여기까지 하면 위의 Request samples는 안뜨고 아래 Response samples 가 뜰것이다.
그럼 이제 위의 예제 데이터를 넣어주자.
2-2. Request samples 만들기
@swagger_auto_schema(request_body= openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'user': openapi.Schema(type=openapi.TYPE_NUMBER, description='int'),
}
), responses=response_schema_dict)
- 아까 만들었던 swagger_auto_schema에 request_body = openapi.Schema를 담아준다.
- 이후 Schema의 properties 에 내가 주고 싶은 예시 데이터의 형태를 담아준다.
- 나는 user 의 포린키가 숫자 형식으로 들어가므로 다음과 같이 주어주었다.
그러면 다음과 같이 뜰 것이다.
별거 아닌거 같은데 은근 검색이 안돼서 오늘 하루종일 삽질했다 ㅋㅋㅋ
스웨거 구조를 모르는 내 죄였지 뭐,,
쨋든 해결했으니 누군가에게 도움이 되기를 바라며,,^^*
잘못된 정보가 있다면 댓글로 알려주세요~!~!
모두 즐 코^^*
'WEB > Django' 카테고리의 다른 글
[Django] Django-waffle을 이용하여 Feature Flag 사용하기 (0) | 2021.10.27 |
---|---|
[Django ViewSet] ViewSet 으로 Filter & Permission & Validation (0) | 2021.05.16 |
[Django View] Postman 사용하여 api 주고 받기 (0) | 2021.05.06 |
[Django] instagram 모델 생성 및 Migration 해보기 (1) | 2021.03.24 |