Django CORS 설정
다른 사람이 개발하던걸 이어서 보수작업을 진행하고 있는데 Django 버전이 1.4이기에 무언가 추가하려고 하면 이것 저것 손봐줘야한다.
그런 상황에서 다른 기능을 위해 CORS를 설정 해야하는 상황이 생겼다.
구글링을 통해 다른 사람들이 올린 CORS 설정방법을 통해 진행했다.
설치 : pip install django-cors-headers
setting.py
파일 안에 아래와 같은 설정을 추가했다.
INSTALLED_APPS = [
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = True
설정을 끝낸 후 확인을 해보니 전체 기능이 멈추는 문제가 생겼다.
ERROR
python_2_unicode_compatible
무슨 문제인가 로그를 확인해보니 아래와 같았다.
from django.utils.encoding import python_2_unicode_compatible ImportError: cannot import name 'python_2_unicode_compatible'
검색을 해보니, Django 버전 문제
Removed private Python 2 compatibility APIs 리스트에 django.utils.encoding.python_2_unicode_compatible() - Alias of six.python_2_unicode_compatible()
api가 포함되어 있었다.
해당 모듈을 six
로 바꿔주면 된다고 한다.
설치: pip install six
해당 api를 사용하는 라이브러리를 모두 바꿔줘야한다.
내 경우엔 파일 두개를 손봐줘야했다.
파일 목록 및 경로
- app/lib/python3.6/site-packages/jet/models.py
- app/lib/python3.6/site-packages/jet/dashboard/models.py
해당 파일들을 열어서 아래와 같이 수정해준다.
# from django.utils.encoding import python_2_unicode_compatible
from six import python_2_unicode_compatible
그리고 다시 실행해보니 두번째 문제가 발생했다.
django.core.exceptions.ImproperlyConfigured
File "/app/appvenv/lib/python3.6/site-packages/django/urls/resolvers.py", line 611, in url_patterns
raise ImproperlyConfigured(msg.format(name=self.urlconf_name)) from e
django.core.exceptions.ImproperlyConfigured: The included URLconf 'app.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
뭔가 url쪽에 문제가 생긴것 같아 이것 저것 시도를 해보니 해결되었다.
혹시나 비슷한 문제를 겪고 있는 분이 계시다면, 이런 방법도 있으니 시도해보고 해결하셨으면 합니다.
어떻게 해결되고 무슨 차이로 인해 생긴건지는 잘 모르겠다. 이후에 시간이 된다면 따로 알아보고 정리하려고 한다.
settings.py
확인ROOT_URLCONF = 'app.urls'
로 잘 설정되어 있는지,
app 디렉토리 하위에urls.py
에서urlpattenrs
변수가 제대로 설정되어 있는지 확인한다.- 추가로 CORS를 설정하면서 추가한 환경변수가 리스트 상위에 있는지 잘 확인한다.
위 코드에는 없으나CORS_ORIGIN_WHITELIST = []
배열의 whiteList 도메인이 제대로 설정되어 있는지 확인한다. views.py
수정
# from django.shortcuts import render, render_to_response
from django.shortcuts import get_object_or_404, render
render_to_response
는 Django2.0 에서 삭제되었으므로 render
로 바꿔준다.
만약 해당 모듈을 사용하는 부분이 있으면 모두 render
방식으로 바꿔야 한다.
사용하지 않더라도 해당 모듈은 삭제해줘야한다.
그렇지 않으면 import 하려고 하기만 해도 ImportError가 발생한다.
staticfiles
수정
template 파일들 중에{% load staticfiles %}
이런 형식으로 staticfiles를 불러들이고 있다면 모두{% load static %}
로 바꿔줘야한다.
바꿀 때 VSCode를 기준으로Ctrl + Shift + F
를 통해 파일 전체적으로 검색하여 일괄적으로 변경해 줄 수 있어 편하게 가능하다.
위 설정들을 통해 오류를 하나씩 잡아가면서 문제를 해결했다.
개인 소감
Django의 경우 2.0 이전과 이후의 차이가 크다고 느껴진다.
기능을 추가하다가 문제가 발생하면 검색했을 때 보통 2.0 버전 이후를 기준으로 설명되어 있는게 대부분이라 삽질을 해야한다.
내가 만든것도 아니고 다른 사람이 만든거라 힘든데 이런 문제 까지 있으니 힘들고 이전에 발생했던 문제가 또 발생하면 떠올리는것도 찾는것도 문제여서 사소한 것 이라도 적어두고 참고해야지
위 과정을 통해 이번 문제를 해결하기는 했는데 전문가처럼이 아닌 오류 로그를 뒤쫓아 하나씩 벌레를 잡는 주먹구구식으로 해결하는 느낌이였다.
Django에 익숙해지고 개발 지식을 더 쌓아서 원인을 바로 알고 해결하는 멋있는 개발자가 되었으면 좋겠다.
오류가 발생을 하면 원인이 무엇인지 바로 파악을 못 하니까 삽질을 하며 시간을 너무 많이 쓰는 것 같아 매번 쫓겨서 슬프다.
'🛠️Framework > 🚀Django' 카테고리의 다른 글
DRF API 뷰 작성 방법 (0) | 2023.04.24 |
---|