728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL

 

앞에서 Django Swagger DRF(django Rest Framework)을 알아봤다면,
이번에는 Ninja에 대해서 알아보자.
DRF(Django Rest Framework) Swagger와 비교해 보고 싶으면 이전 포스팅 참고: Django-Swagger-DRF

 

■ Ninja 설치 및 사용법

1. Ninja 설치 : pip install django-ninja

2. 프로젝트 구조

3. Ninja 사용법

# django app의 views.py

from ninja import NinjaAPI

api = NinjaAPI()    # NinjaAPI() 괄호 안의 속성에 따라 사용자가 원하는 데로 변경 가능

 

@api.get("/get", tags=["get의 이름"], summary="get summary")    # tags, summary 등의 속성으로 api 정보를 줄 수 있음

def get(request, param1: int, param2: int = None):    # None 값을 주면 required(필수값)이 아님, 항상 필수값 뒤로 코딩하여야 함

    return {"result": param1 + param1}    # json 형식으로 return값 세팅

 

@api.get("/format/{a}and{b}")    # {} 안의 값에 따라 return값이 달라짐

def get_format(request, param1: int, param2: int):

    return {"add": param1 + param2, "multiply": param1 * param2}

 

@api.get("/response/", response={200: Item, 403: Error})    # Item, Error는 django app의 schemas.py에 선언

def get_response(request):

    if not request.user.is_authenticated:

        # response 형식에 따라 return값 세팅, message 외 다른 값을 추가해도 Error Class로 세팅이 이미 되어 있기 때문에 나오지 않음

        return 403, {"message": "Please sign in first"}

    return request.user

 

@api.api_operation(["POST", "PATCH"], "/path")    # post, patch 동시 선언

def mixed(request):

    return {"result": True}

 

@api.post("/post")

def post(request, param1: str, item: Item):    # Item은 django app의 schemas.py에 선언

    return {"result": True, "message": "메세지"}


# django app의 schemas.py

from typing import List

from ninja import Schema

 

class Item(Schema):

    name: str

    description: str

    price: float

    quantity: int

 

class Error(Schema):

    message: str


# django project의 urls.py에 선언

from django.contrib

import admin from django.urls import path

from django_app_2.views import api    # app import

 

urlpatterns = [

    path('admin/', admin.site.urls),

    path('api/', api.urls)

]

4. 실행화면

- 기본 url은 로컬 주소에 path에 설정된 값에 /docs를 붙이면 Swagger가 실행된다.

- http://127.0.0.1:8000/api/docs

Ninja Swagger 실행화면

5. views.py에 주석으로 달아놓은 부분을 바꿔가면서 api가 어떻게 바뀌는지 꼭 테스트해 보고, 추가적으로 기능이 필요하다면 Ninja 공식사이트를 참고하자.

    지식도 없고, 영어도 잘 못하는 내가 봐도 그렇게 어렵지 않게 설명이 잘 되어 있다. 

    - Ninja 공식사이트 : https://django-ninja.rest-framework.com/

 

728x90
반응형
LIST
728x90
반응형
SMALL
Django Swagger API를 만들다 보면, API별로 설명을 작성해야 Front개발자가 참고하여 API를 사용할 수 있다.
MarkDown을 사용하여 API 설명 작성하는 방법을 알아보자.

■ MarkDown을 사용한 API

1. 이전 포스팅에서 MarkDown을 사용하여 간단하게 API에 대한 설명을 적어보았다.

    (아래 이미지까지 소스는 링크 참고 : Swagger API 만들기)

MarkDown문법으로 작성한 operation_description

■ MarkDown 사용법

- API에 대한 설명은 함수안에서 """ """ 안에서 사용할 수 있다. ("""를 입력하면 감쌀수 있게 """가 자동으로 생성된다.)
1. 글씨크기 조절 # 1개부터 6개까지 사용 가능
2. 기울림꼴 * 또는 _
3. 굵게 ** 또는 __
4. 기울림꼴 + 굵게 *** 또는 ___
5. 취소선 ~~
6. 취소선 + 굵게 등 3, 4, 5와 동일하게 사용하되 ~~ 사용
7. 목록 * 목록
    * 목록 1
        * 목록 2
8. 링크 [나의 블로그 링크](https://200-rush.tistory.com/ "나의 블로그")
9. 테이블
- 규칙을 따라야 함
- 하단 3줄은 셀 중간중간에 값 넣을때 사용

|col1|col2|col3|
|---|---|---|
|col1row1|col1row1|col2row1|
|col1row2|col1row2|col2row2|
|col1row3|col1row3|col2row3|
|col1row4|||
||col2row5||
|||col3row6|
10. Line --- 또는 *** 또는 ___

 

■ MarkDown 적용한 실제 소스

1. 특수기호 안에서 특수기호를 표시하고 싶을 때에는 특수기호 앞에 \를 붙인다.

2. 중간중간에 ---, ***, ___은 라인을 표시하는 것으로 결과는 똑같이 표시된다.

3. 링크 관련해서는 실제 Swagger에서 글씨에 마우스를 올리면 "나의 블로그"이라는 설명이 표시된다.

# App의 views.py

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

def put_test(request):

    """

    # \# 1개

    ## \# 2개

    ### \# 3개

    #### \# 4개

    ##### \# 5개

    ###### \# 6개

    ---

    *\*을 사용한 기울임 꼴*

    **\*\*을 사용한 Bold**

    ***\*\*\*을 사용한 Bold 기울임 꼴***

    ---

    _\_을 사용한 기울임 꼴_

    __\_\_을 사용한 Bold__

    ___\_\_\_을 사용한 Bold 기울임 꼴___

    ***

    ~~\~\~을 사용한 취소선~~

    ~~**\~\~와\*\*을 사용한 Bold 취소선**~~

    ~~___\~\~\~와\_\_\_을 사용한 Bold 기울임 꼴 취소선___~~

    ___

    * 목록

        * 목록 1

            * 목록 2

    ---

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

    ---

    |col1|col2|col3|

    |---|---|---|

    |col1row1|col1row1|col2row1|

    |col1row2|col1row2|col2row2|

    |col1row3|col1row3|col2row3|

    |col1row4|||

    ||col2row5||

    |||col3row6|

    """

    return Response(request)

 

■ 소스를 실행한 Swagger 화면

MarkDown 적용한 실행화면

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

+ Recent posts