[django] drf-yasg #2

짱구석·2020년 12월 6일
0
post-thumbnail

https://velog.io/@gyuseok-dev/%ED%95%9C%EB%8B%A4-drf-yasg-%EB%AC%B8%EC%84%9C%ED%99%94
이전 포스팅에서 drf-yasg 설치를 해보았다.

하지만 설치만 하고 써먹지 않으면 의미가 없다.
오늘은 하나의 GET method에 어떻게 문서를 적용할 수 있는지 도전해보겠다.

In [APPNAME]/views.py

...
from drf_yasg.utils import swagger_auto_schema
...
class ProductListView(APIView):

    @swagger_auto_schema(
        query_serializer=ProductListQuerySerializer,
        responses={200: ProductSerializer(many=True)},
        tags=['Products'],
    )
    def get(self, request):

        from_region = request.GET.get('departure_region', None)
        to_region   = request.GET.get('arrival_region', None)
        from_date   = request.GET.get('departure_date', None)
        offset      = int(request.GET.get('offset', 0))
        limit       = int(request.GET.get('limit', 20))
...

GET의 경우 Request없이 Query Parameter로 받아는 오는 정보를 표시하기 위해서 필요한 부분을 떼왔다
물론 예제에서 짜깁기 했다.
https://drf-yasg.readthedocs.io/en/stable/readme.html#example-project

우선 내가 쿼리로 받을 내용을 serializer로 선언한다.

class ProductListQuerySerializer(serializers.Serializer):
    departure_region = serializers.CharField(help_text="출발 지역", required=False)
    arrival_region   = serializers.CharField(help_text="도착 지역", required=False)
    departure_date   = serializers.DateField(help_text="출발 날짜(YYYY-MM-DD)", required=False)
    offset           = serializers.CharField(help_text="시작위치", required=False)
    limit            = serializers.CharField(help_text="리스트 갯수", required=False)

선언한 QueryListSerializer를 decorator를 이용해서 문서에 표시되도록 해준다.

#선언
from drf_yasg.utils import swagger_auto_schema

#사용
...
@swagger_auto_schema(
    query_serializer=ProductListQuerySerializer,
    responses={200: ProductSerializer(many=True)},
    tags=['Products'],
)
class ViewName(APIView)
...

이제 결과를 보자(군침) http://[ip_address]/swagger/로 접속!!

이렇게 필요한 쿼리와 설명을 확인할 수 있으며 설정에 따라 필수요소를 지정할 수도 있다.
본인은 어느하나가 없어도 통과할 수 있게 serializer field의 required를 모두 False로 지정했다.


우측 상단의 Try it out를 누른 뒤 쿼리를 채워넣고 Execute를 눌러 결과를 확인해볼 수 있다.
하단에 Request URL로 어떤 URL이 적용되었는지 확인 할 수 있다. 여기서 한글이기때문에 url에 unicode로 표현되는데 동작에는 문제가 없었다.

다음과 Response body가 출력되고 from_region에 내가 원하는 김포가 보인다.
하단에 출력시간을 볼 수 있다는 점도 매력이다.

다음에는 POST method까지 확장할수 있으면 좋겠다.

0개의 댓글