본문 바로가기
▶개발/AWS&Server

[Django Rest API 오류해결] ModuleNotFoundError: No module named 'rest_framework_swagger'

by 브라더 준 2018. 7. 30.

ModuleNotFoundError: No module named 'rest_framework_swagger'


장고서버를 키려고 manage.py를 이용해 runserver를 하니 위와 같이 터미널에서 에러메시지가 출력됐다. swagger와 내가 만들었던 app 'login'이 붙어있어 의아했다. 구글링해보니 swagger의 버전이 업그레이드되면서 urls를 사용하는 방식의 변화가 생긴 것 같다.


이전 방식은 아래와 같다. url 패턴에 get_swagger_view를 직접 사용했다.


from django.conf.urls import url, include
from django.contrib import admin
from rest_framework import routers
from rest_framework_swagger.views import get_swagger_view

import login.api

app_name='login'

router = routers.DefaultRouter()
router.register('members', login.api.MemberViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/doc', get_swagger_view(title='Rest API Document')),
    url(r'^api/v1/', include((router.urls, 'member'), namespace='api')),
]


그러나 swagger의 버전이 올라가면서 아래의 코드와 같이 schema_view에 get_swagger_view를 얻어내고, 이 view를 url에 적용하면 된다고 한다.


from django.conf.urls import url, include
from django.contrib import admin
from rest_framework import routers
from rest_framework_swagger.views import get_swagger_view

import login.api

app_name='login'

router = routers.DefaultRouter()
router.register('members', login.api.MemberViewSet)

schema_view = get_swagger_view(title='Rest API Document')

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/doc', schema_view),
    url(r'^api/v1/', include((router.urls, 'member'), namespace='api')),
]


 그래도 해결이 되지 않았다. 3시간 여 삽질끝에 문제를 찾았다. 아까 의아하게 내가 사용하는 app인 login과 swagger가 붙어있었다. 이유인즉 setting.py에서 INSTALLED_APPS의 ','(콤마)가 빠져있었기에 swagger와 login을 한묶음으로 시스템이 파악했고, 당연히 모듈을 찾을 수 없다고 한 것이다. 마지막 apps에도 ',' 콤마를 붙이는 것을  생활화 해야겠다.





반응형