Settings.py 분리를 하는 이유
django를 처음 접하다보면 settings.py를 왜 분리해야하는지 아직 감이 안잡힐 것이다.
하지만 간단한 프로젝트라고 한번 완성하고난 후 배포까지 해보면 이때서야 알게 될것이다.
기본적으로 local
서버와 prod
서버에서의 하고자 하는 행동들이 다른다는것을
그리고 secret_key도 따로 분리하여 가지고 있어야한다.(보안을 위해서이다.)
일단 본격적으로 분리시키기전에 secret_key부터 나누고 시작할것이다.
secret key
를 담고 있을 파일을 하나 만들어줘야하는데,
경로는 <프로젝트>/secret.json
이라고 하나 만들어준다. (제일 상단 경로에 만들어준다. manage.py와 같은 경로)
{
"SECRET_KEY": "...."
}
위의 SECRET_KEY는 settings.py에서 상단 부분에 길게 문자열로 표시되어있는 부분을 가져와 JSON 형식에 맞춰 넣어준다.
이후, 기존 settings.py에서 SECRET_KEY
부분을 지우고 아래의 코드를 넣어주면 된다.
import json
with open('secret.json') as file:
secrets = json.loads(file.read())
def get_secret(setting, secret_key=secrets):
try:
return secret_key[setting]
except KeyError:
error_msg = f'Set the {setting} environment variable'
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
SECRET KEY를 분리 시켰다면 본격적으로 settings.py를 분리 시켜보자
django를 처음 셋팅할때 startprojec
를 할때 정해줬던 디렉토리 아래에 settings
라는 디렉토리를 하나 생성해준다.
그리고 settings.py를 base.py로 변경하고 settings 디렉토리 아래로 이동시켜준다.
이후, local.py와 prod.py를 새로 생성해준다.
# local.py
from .base import *
DEBUG = True
# prod.py
from .base import *
DEBUG = False
위 처럼 설정하고 마지막으로 base.py
, manage.py
, wsgi.py
에서 변경 약간의 코드를 해줘야한다.
# base.py
...
BASE_DIR = os.path.dirname(...) # os.path.dirname을 하나 더 추가해줘야한다. 이유는 settings라는 디렉토리를 만들어서 경로가 하나 더 생겼기 때문이다.
...
# wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<프로젝트파일명>.settings.prod')
# manage.py
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<프로젝트파일명>.settings.local')
...
위 처럼 설정해주면 settings.py 분리 시키기는 완성된것이다.
'Django' 카테고리의 다른 글
django rest framework에 대해서 (0) | 2021.06.19 |
---|---|
(django template) typescript 적용시키기 (0) | 2021.03.13 |
Django 구조 (0) | 2020.10.11 |
django shell plus, Jupyter Notebook 설치 (0) | 2020.10.11 |
django 시작하기 (0) | 2020.10.02 |