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) 간단하게 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