Django secret key & settings.py 분리

이현준·2022년 6월 1일
0

Django

목록 보기
3/4

참고 : https://wikidocs.net/75560 (점프 투 장고)

Django sceret key 분리

  • json 파일로 비밀 코드 관리
# secrets.json

{
	'SECRET_KEY' : 'lolololollol',
}

secrets.json 생성 후 .gitignore에 추가

# settings.py

import os, json
from django.core.exceptions import ImproperlyConfigured

secret_file = os.path.join(BASE_DIR, 'secrets.json')

with open(secret_file) as f:
	secrets = json.loads(f.read())
    
def get_secret(setting, secrets=secrets):
	"""비밀 변수 가져오기 or 예외 반환"""
    try:
    	return secrets[setting]
    except KeyError:
    	error_msg = "Set the {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

환경별로 settings 분리

settings.py가 있던 위치에 /settings 폴더를 만들어주고 __init__.py 생성

project
	settings
    	__init__.py
        base.py
        local.py
        prod.py

base.py 파일에는 기존 settings.py 내용을 넣어주고, local.py prod.py에서 상속 받아준 다음 필요한 세팅을 추가한다.

그리고 base.py에 있는 BASE_DIR에 .parent 한번 추가

# base.py
...
BASE_DIR = Path(__file__).resolve().parent.parent.parent
...
  • local.py : base.py를 모두 임포트한 뒤 debug=True 로 설정하고 개발용 db 설정(debug가 True면 allowed_host엔 자동으로 로컬주소입력)

  • prod.py : base.py를 모두 임포트한 뒤 debug=False로 설정하고 배포용 db 설정

분리한 setting 적용

python manage.py runserver --settings=config.settings.prod # 배포
python manage.py runserver --settings=config.settings.local # 개발

위와 같이 해도 되지만 DJANGO_SETTINGS_MODULE 환경 변수 설정으로 더 쉽게 실행 가능!

# window
(mysite) c:\projects\mysite>set DJANGO_SETTINGS_MODULE=config.settings.local
(mysite) c:\projects\mysite>python manage.py runserver

# mac
$ export DJANGO_SETTINGS_MODULE=config.settings.development
$ python manage.py runserver
profile
기록, 정리하는 습관 만들기

0개의 댓글