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에도 ',' 콤마를 붙이는 것을 생활화 해야겠다.
반응형
'▶개발 > AWS&Server' 카테고리의 다른 글
(AWS EC2 정리노트 #4) AMIs와 AWS Marketplace (0) | 2018.06.22 |
---|---|
(AWS EC2 정리노트 #3) 맥(OSX)에서 리눅스,윈도우 웹서버 사용하기 (0) | 2018.06.22 |
(AWS EC2 정리노트 #2) EC2 서비스, 인스턴스시작 (0) | 2018.06.21 |
(AWS EC2 정리노트 #1) AWS 시작하기, Resion (0) | 2018.06.20 |