WEB/Django

[Swagger(Redoc) + Django] Request samples, Response samples 직접 입력하기

김쿸후 2021. 7. 17. 21:23

요즘 바빠서 블로그 글쓰는걸 까먹고 있다가 오늘 삽질을 너무 오래해서 글을 하나 쓴다. 

 

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 의 포린키가 숫자 형식으로 들어가므로 다음과 같이 주어주었다. 

 

그러면 다음과 같이 뜰 것이다. 

 

별거 아닌거 같은데 은근 검색이 안돼서 오늘 하루종일 삽질했다 ㅋㅋㅋ

스웨거 구조를 모르는 내 죄였지 뭐,,

쨋든 해결했으니 누군가에게 도움이 되기를 바라며,,^^*

 

잘못된 정보가 있다면 댓글로 알려주세요~!~! 

 

모두 즐 코^^*