inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

1599

yezi9733

작성한 질문수 25

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 = ['*'] 설정까지도 해봤는데 왜 저런 오류가 뜨는걸까요?

 

 

react django python docker

답변 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") 경로로 수정을 하시라 가이드를 드릴 것이구요.

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

화이팅입니다. :-)

0

yezi9733

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

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

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

0

이진석

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

0

qwd1123

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

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

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

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

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

0

이진석

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

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

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

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

안녕하세요.

0

48

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

272

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

381

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

266

1

bootstrap4

0

470

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

362

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

572

3

useState는 필수일까요?

0

261

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

596

4

Django allauth를 사용한 소셜 로그인 시 에러

0

654

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

552

2

useLocalStorage() 함수 사용여부

0

228

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

447

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

897

2

docker compose 를 통한 배포 관련 오류 문의

0

670

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

364

1

is_like_user

0

233

1

related_name 오류

0

272

1

re_path 오류

0

258

1

re_path url

0

249

1

No post matches the given query

0

659

2