REST API를 만들면 Swagger를 상당히 많이 사용한다.

그래서 Django 에서도 Swagger를 적용해보고자 한다.

 

그런데.. 하다보니 안되는 부분들을 발견해서 (버전이슈..)

포스팅해본다 ^^;

 

결론부터 말하자면,

django_rest_swagger를 쓰지말고 , drf-yasg를 쓰는 것을 추천한다

 

 

 

처음에 djnago-rest_swagger를 설치 후 , settings.py에 추가하고 

기동하면 

  • AttributeError at /api/docs/ -> 'AutoSchema' object has no attribute 'get_link'

다음과 같은 오류가 난다..

https://github.com/encode/django-rest-framework/issues/6809 

 

해당 글을 참조해서.. settings.py에 다음을 추가하면.. (저글에선 이걸 추가하면 된다는글이 대부분이다 ㅠ)

	REST_FRAMEWORK = {
	...
	'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
	}

 

But,,,

  • django_rest_swagger - 'staticfiles' is not a registered tag library. Must be one of:

다음 오류가 발생,,,, 다시 구글링..

https://stackoverflow.com/questions/59230539/django-rest-swagger-staticfiles-is-not-a-registered-tag-library-must-be-one

The problem is that staticfiles template tag was deprecated in Django 2.2 and is finally removed in Django 3.0

The djagno-rest-swagger package itself is deprecated and is no longer maintained.

Their GitHub repo recommends something like drf-yasg

 

해당글을 보면, staticfiles 템플릿을 Django3.0버전에서 삭제했고, 

django-rest-swagger 패키지는 더이상 관리안한다고한다,,,

그래서 django-rest-swagger GitHub에서도 drf-yasg를 쓰도록 추천한다고 ^^;

 

여러분들~~ 그냥 속편하게 drf-wasg 쓰세염 ^_^

 

 

https://github.com/axnsan12/drf-yasg

을 참조해서 쓰면된닷

 

 

 

1. drf-yasg 설치

pip install -U drf-yasg

 

 

 

2. settings.py 설정

INSTALLED_APPS = [
   ...
   'drf_yasg',
   ...
]

 

 

 

 

3.urls.py 적용

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_url_patterns = [
  path('api/', include('test.urls')),
]
schema_view = get_schema_view(
  openapi.Info(
    title="Django API",
    default_version='v1',
    terms_of_service="https://www.google.com/policies/terms/",
  ),
  public=True,
  permission_classes=(permissions.AllowAny,),
  patterns=schema_url_patterns,
)

urlpatterns = [
  path('admin/', admin.site.urls),
  path('api/', include('test.urls')),
  url(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
  url(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
  url(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]



 

 

그러고 기동한뒤 

http://localhost:8000/swagger로 접속하면 잘뜬다

그리고 http://localhost:8000/redoc으로도 접속하면 뜬다.

 

그럼 이만

 

 

'DEVELOP > Backend' 카테고리의 다른 글

Spring Security 에서 OAuth 2.0이란?  (0) 2020.05.18
JPA이란? (전체적인 개념, 느낀점)  (0) 2020.05.18
Django CORS 설정하기  (0) 2020.03.26
python pip Proxy 설정하기  (0) 2020.03.24
Django 시작하기 [3] Django MVC 패턴  (0) 2020.03.18

+ Recent posts