2020-03-23

Django 03. Settings.py 초기설정

Git 업로드를 위해 secret_key를 분리하고, timezone, static 경로 등을 설정합니다.


1. SECRET_KEY 분리

django는 프로젝트 시작 시 무작위의 SECRET_KEY 값을 생성합니다.

SECRET_KEY는 암호화 서명 등 보안 설정에 사용되는 중요한 값입니다.

django 공식 문서에서도 이 KEY값을 숨기는것을 권장하고 있습니다.

이 프로젝트는 Git을 통해 버전관리를 하므로 SECRET_KEY를 json으로 분리하겠습니다.

manage.py가 있는 루트에 secrets.json 파일을 생성해주고 settings.py의 SECRET_KEY값을 추가해줍니다.

1
2
3
{
"SECRET_KEY": "s5sz5mjuex4k#6s7+_#)xp#a*u$hr7vqao&xb6^8*(me5pq4-m"
}

(위의 key값은 예시일 뿐으로 현재 프로젝트와 상관없는 무작위 값입니다.)

후에 SMTP를 사용할 때, mail host pw값과 같은 비밀값들을 추가해줄 수 있습니다.

settings.py의 SECRET_KEY 부분을 방금 생성한 secrets.json을 읽어오도록 수정해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import json
from django.conf import settings
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):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {0} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

프로젝트 최상단 루트에 .gitignore 파일을 생성하고 secrets.json 파일을 추가해줍니다.

1
secrets.json

secrets.json 뿐만 아니라 django에서 숨겨야하는 값들을 모두 gitignore에 추가하기 위해 아래의 gitignore.io 사이트를 참고하여 추가해줍니다.

Django Gitignore 파일 확인하기

이미 SECRET_KEY값이 노출되었다면 Django Secret_key 생성하기 사이트에서 SECRET_KEY를 다시 생성할 수 있습니다.

2. LANGUAGE_CODE / TIME_ZONE 설정

django-admin 등을 한글형식으로 바꾸고 한국 시간대를 사용하기 위해 settings.py의 LANGUAGE_CODETIME_ZONE을 아래와 같이 수정해줍니다.

1
2
LANGUAGE_CODE = 'ko' 
TIME_ZONE = 'Asia/Seoul'

*django 3버전으로 넘어오면서 2버전대에서 사용하던 ‘ko-kr’을 사용하면 오류가 발생하게 됩니다.

3. TEPLATES 경로설정

Template 폴더를 각 App마다 생성하지 않고 한 곳에서 관리하기 위해 TEMPLATES의 ‘DIRS’를 수정해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

4. STATIC 경로설정

마찬가지로 django 프로젝트의 css, js, img 등 정적인 파일들을 관리하기 위해 STATIC_URL을 수정하고, STATICFILES_DIRS, STATIC_ROOT 경로를 추가해줍니다.

1
2
3
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, '.static')

STATICFILES_DIRS은 static 파일을 찾는 경로, STATIC_ROOT는 배포작업시 collectstatic 명령을 사용했을 때 정적파일들을 모으고 지정한 경로로 옮겨주는 역할을 합니다.

5. MEDIA 경로설정

파일 / 사진 첨부와 같이 media파일을 저장하는 경로를 설정하기 위해 MEDIA_URLMEDIA_ROOT를 추가해줍니다.

1
2
MEDIA_URL = '/media/' # 업로드 할 경로
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

지정된 ROOT에 미리 templates, static, media 폴더를 생성해줍니다.

위의 설정을 모두 마쳤다면 프로젝트 개발 전 전체구조는 아래와 같습니다.

django-project-03