인프런 커뮤니티 질문&답변

yezi9733님의 프로필 이미지
yezi9733

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

프로젝트 생성 및 초기 프로젝트 환경설정

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 오류가 뜹니다.

해결된 질문

작성

·

1.4K

0

제목 없음.png

제목 없음2.png

강의내용대로 쭉 따라가면서

  1. askcomapny경로에서 settings 폴더를생성

  2. cd askcompany로 경로 이동후 git add .를 한뒤 git mv settings.py settings/common.py 로 파일이동

  3. 그 상태로 runserver를 해봤더니 CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 오류가 뜸

  4. 원래 경로에 settings.py파일을 다시 만들어 보고 runserver를 해봤더니 오류가 사라짐

옮기는 과정에서 문제가 있는건지는 모르겠네요 DEBUG = True 이고 ALLOWED_HOSTS = ['*'] 설정까지도 해봤는데 왜 저런 오류가 뜨는걸까요?

 

 

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

askcompany/settings.py 파일을 askcompany/settings/common.py 경로로 옮기시고 그대로 runserver를 하셨습니다.

장고에서는 DJANGO_SETTINGS_MODULE 환경변수를 통해, 현재 장고프로젝트에서 사용할 settings 경로를 지정합니다. 이 설정은 직접 DJANGO_SETTINGS_MODULE 환경변수를 설정하셔도 되고, runserver 시에 --settings 인자로 지정하실 수도 있습니다.

DJANGO_SETTINGS_MODULE 환경변수를 지정하지 않으셨고, --settings 인자도 지정하지 않으셨다면

manage.py 파일 내에 지정된 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings") 코드에 의해, DJANGO_SETTINGS_MODULE 환경변수가 디폴트로 "askcompany.settings"로 지정이 됩니다.

그럼 askcompany/settings.py 시에는 잘 동작합니다. 왜냐하면 askcompany/settings.py 경로가 "askcompany.settings" 경로에 부합되기 때문이죠.

그런데 이 파일을 askcompany/settings/common.py 경로로 옮기셨는 데 DJANGO_SETTINGS_MODULE 경로는 그대로 askcompany.settings 로 되어있으니, 참조할려는 settings 가 없는 것입니다.

장고의 settings는 프로젝트의 디폴트 설정과 더불어 프로젝트의 DJANGO_SETTINGS_MODULE 설정을 덮어쓰기한 내역을 참조합니다. 그런데 DJANGO_SETTINGS_MODULE 경로에 지정된 파일이 없을 경우, 장고의 디폴트 설정만 로딩이 되겠죠.

장고의 디폴트 설정은 django/conf/global_settings.py 경로에 정의되어있습니다. 이 파일에 DEBUG = False 설정이 있으며, ALLOWED_HOSTS = [] 설정이 있습니다.

관련 코드 : https://github.com/django/django/blob/main/django/conf/global_settings.py#L17

그러니 askcompany/settings.py 파일을 askcompany/settings/common.py 경로로 옮긴 것은 이관 작업이 덜 끝난 것입니다. 이는 개발환경에서의 설정과 배포환경에서의 설정을 별도의 파일로 분리하기 위함입니다. 제가 가이드에서 askcompany/settings/dev.py 파일과 askcompany/settings/prod.py 파일을 생성하고, manage.py 파일에서 os.environ.setdefault 코드 부분을 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings.dev") 경로로 수정하시라 가이드를 드릴 것입니다. 그리고 askcompany/wsgi.py 파일에서는 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings.prod") 경로로 수정을 하시라 가이드를 드릴 것이구요.

차근차근 확인해보시고, 궁금한 점 있으시면 편히 질문 남겨주세요.

화이팅입니다. :-)

yezi9733님의 프로필 이미지
yezi9733
질문자

넵 감사합니다. 파이참에서 시프트 + F10으로 실행해서 오류가 난거더라고요 ㅜㅜ

python manage.py runserver를 하니깐 오퍼레이터 테이블 오류 또서 migrate했더니 정상작동되네요.

혹시 파이참에서 시프트 + F10으로 실행시키는거랑 터미널에서 python manage.py runserver로 실행시키는거랑 차이점이 있는지 궁금합니다! 답변해주셔서 감사해요!

이진석님의 프로필 이미지
이진석
지식공유자

파이참 메뉴를 통한 실행은 어떤 옵션이 지정되어있는 지에 따라 실행이 달라질 수 밖에 없습니다. DJANGO_SETTINGS_MODULE 환경변수가 어떤 값으로 지정되어있을 수도 있구요. 그러니 그 설정값을 확인해보셔야 합니다.

저도 안내해주신 대로 코드 입력했는데도 동일한 오류가 떠서

python manage.py runserver를 하고 migrate했더니 정상 작동되네요...

이유가 무엇인지 궁금합니다..

혹시 장고 툴바 설치하면서 장고 버전이 변경되었는데

이거 때문일 수도 있나여??

이진석님의 프로필 이미지
이진석
지식공유자

@qwd123 : settings 위치 변경으로 인해, BASE_DIR도 변경해주셔야하는 데 변경해주시지않아, settings.DATABASES에서 바라보는 db.sqlite3 파일의 경로가 기존 주소를 가리키지않아서 데이터베이스가 없는 것으로 장고가 판단한 상황으로 보입니다.

그래서 migrate 명령으로 데이터베이스 생성이 필요하신 상황이 되셨던 것입니다.

BASE_DIR 설정값을 확인해보세요.

확인해보시고 댓글 부탁드립니다.

yezi9733님의 프로필 이미지
yezi9733

작성한 질문수

질문하기