728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL
Django DRF(Django Rest Framework) View의 종류
1. APIView(CBV) - 클래스형 뷰
2. @api_view(FBV) - 함수형 뷰
이 2개 중 FBV 활용하는 법 알아보기
DRF(Django Rest Framework)가 세팅이 안되어 있으면 이전 포스팅 참고:  Django-Swagger-DRF-Setting

 

@api_view(FBV) - 함수형 뷰 사용 및 활용법

1. 뷰를 작성할 때 함수 위에 @api_view와 같이 Decorator(데코레이터)를 사용한다.

2. Decorator(데코레이터)를 사용하여 GET, POST API를 만드는 방법이다.

# App의 views.py

 

@api_view(['GET'])

def get_test(request):

    return Response(request)

 

# tags: API 명칭 설명

# manual_parameters: API에 Parameter 생성 (하단 api_params.py)

@swagger_auto_schema(method="POST", tags=["새로운 이름"], manual_parameters=get_test_params,

                                           operation_summary="api 이름", operation_description="api 사용법",

                                           responses={201: '201 Description', 400: '400 Description', 500: '500 Description'})

@api_view(['POST'])    # POST API

def post_test(request):

    return Response(request)

 

@swagger_auto_schema(method="PUT", tags=["새로운 이름"])

@api_view(['PUT'])    # PUT API

def put_test(request):

    # 5번 참고

    """

    # 제목 크기 1

    ## 제목 크기 2

    ### 제목 크기 3

    #### 제목 크기 4

    ##### 제목 크기 5

    ###### 제목 크기 6

    [나의 블로그](https://200-rush.tistory.com/ "나의 블로그 설명")

    """

    return Response(request)

 

@api_view(['GET', 'POST'])    # GET, POST 2개의 API 동시 생성

def get_post_test(request):

    return Response(request)


# App에 추가한 api_params.py

# (참고) App에 파일을 추가해도 되고, views.py에 작성해도 되나, parameter를 모아두기 위해서 api_params.py를 생성하여 관리하였다.

 

from drf_yasg import openapi

 

get_test_params = [

    openapi.Parameter(

        name="param_1",

        in_=openapi.IN_QUERY,

        description="param_1을 입력",

        required=True,

        type=openapi.TYPE_STRING,

        default="abc"

    )

]


# Project의 urls.py

 

urlpatterns = [

    path('/get', views.get_test),

    path('/post', views.post_test),

    path('/put', views.put_test),

    path('/get_post_test', views.get_post_test)

]

3. Swagger 실행화면

  - http://127.0.0.1:8000/swagger/

  - @api_view(['GET', 'POST'])로 지정한 get_post_test 함수는 아래와 같이 그룹으로 표시된다.

  - @swagger_auto_schema의 tags를 사용하면 함수이름이 아닌 새롭게 지정한 이름이 표시된다. tags이름이 같으면 그룹으로 표시된다.

API 리스트

4. manual_parameters를 사용하면 Parameter를 넣을 수 있는 칸이 활성화되고, operation_summary는 path옆에 나타나는 문구,

    operation_description는 api를 펼쳤을 때 나타나는 문구를 표시할 수 있다.

    responses는 결과코드를 세팅할 수 있다.

@swagger_auto_schema을 활용한 API

5. App의 views.py의 소스를 보면 operation_description은 함수 안에 """ """을 사용하여 표시가 가능하다.

    MarkDown 문법으로 operation_description을 작성하면 된다.

MarkDown문법으로 작성한 operation_description

6. MarkDown 사용법 : DjangoSwagger에서 MarkDown사용법

728x90
반응형
LIST
728x90
반응형
SMALL
Django에서 지원하는 DRF(Django Rest Framework) 간단하게 Setting 하기

 

기본적으로 Swagger연동을 위해서는 Django가 설치되어 있어야 한다.
또한 App, Project 생성되어있어야 한다.
준비가 안되어 있으면 이전 포스팅 참고: Python, Django, Anaconda Setting, PyCharm Project

 

Swagger(DRF) 세팅 방법 및 결과 확인

1. DRF(Django Rest Framework) 설치 : pip install djangorestframework

2. Drf-Yasg 설치 : pip install drg-yasg

3. settings.py에 설치된 install 한 app추가

INSTALLED_APPS = [

    ........,

    'drf_yasg',

    'rest_framework'

]

4. 복사, 붙여 넣기 수준으로 urls.py에 아래 소스 추가

from rest_framework.permissions import AllowAny

from drf_yasg.views import get_schema_view

from drf_yasg import openapi

from django.urls import re_path

 

# [5. 실행화면]과 비교하면 쉽게 이해 가능(모두 수정가능)

schema_view = get_schema_view(

    openapi.Info(

        title="Snippets API",

        default_version='v1',

        description="Test description",

        terms_of_service="https://www.google.com/policies/terms/",

        contact=openapi.Contact(email="contact@snippets.local"),

        license=openapi.License(name="BSD License"),

    ),

    public=True,

    permission_classes=[AllowAny]

    # [참고]

    # AllowAny(기본값) : 인증에 관계없이 모두 허용

    # IsAuthenticated : 인증된 요청만 허용

    # IsAdminUser : Staff인증 요청만 허용

    # IsAuthenticatedOrReadOnly : 인증이 안되어 있으면 읽기 권한만 허용

    # DjangoModelPermissons : 인증된 요청만 허용 + 장고 모델단위 권한 체크

    # DjangoModelPermissionsOrAnonReadOnly : DjangoModelPermissons 유사, 인증이 안되어 있으면 읽기 권한만 허용

    # DjangoObjectPermissons : 인증이 안되어 있으면 거부, 인증이 되어있으면 Object에 대한 권한 체크를 수행

)

 

# 기존에 있는 urlpatterns

 

if settings.DEBUG:

    urlpatterns += [

        re_path(r'^swagger(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name="schema-json"),

        re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),

        re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc')

    ]

5. 실행화면

    - http://127.0.0.1:8000/swagger/

Swagger 실행화면

 

공식문서 : https://drf-yasg.readthedocs.io/en/stable/readme.html

728x90
반응형
LIST

+ Recent posts