파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
$ poetry remove django # 기존 장고 제거
$ poetry add django@{{ version or 'latest' }} # 원하는 장고 버전 설치
$ poetry add django-debug-toolbar --dev # django-debug-toolbar를 개발용 패키지로 지정하며 설치
poertry를 사용하지 않으면 패키지 버전 관리를 해줘야 한다.(requirements.txt)
아래 settings.py 관리하는 방법처럼 common.txt, dev.txt, prod.txt로 나누어서 관리가 필요하다.
즉 requirements.txt 하나로 관리하는 것이 아니라, requirements/common.txt, requirements/dev.txt, requirements/prod.txt를 생성해서 관리하자.
dev.txt와 prod.txt의 첫 줄은 -r common.txt
로 써서 common.txt를 상속받고 이후에 필요한 패키지 리스트를 추가해주면 된다.
# /askcompany/askcompany/settings/common.py
# common.py는 기존의 settings.py를 그대로 복사한다. 그리고 몇가지 설정을 수정해준다.
# ...
# BASE_DIR에 parent프로퍼티를 한번 더 붙인다.
# 디렉토리가 한뎁스 깊어졌기 때문에 참조하는 베이스 디렉토리도 달라져야 한다. 이걸 바꾸지 않으면 모든게 꼬인다.
BASE_DIR = Path(__file__).resolve().parent.parent.parent
# ...
# /askcompany/askcompany/settings/prod.py
# common.py의 모든 변수를 가져온다. 필요한 설정만 오버라이드 한다. (ex. DEBUG = False)
from .common import *
# /askcompany/askcompany/settings/dev.py
# common.py의 모든 변수를 가져온다. 필요한 설정만 오버라이드 한다.
from .common import *
# /askcompany/askcompany/settings/common.py
# ...
# 정적 파일 요청이 오는 URL
STATIC_URL = 'static/'
# python manage.py collectstatic 명령이 참조하는 설정
STATIC_ROOT = BASE_DIR / 'static'
# 파일에 대한 요청이 오는 URL
MEDIA_URL = 'media/'
# 실제 파일을 저장할 ROOT 경로이다. (AWS S3 등으로 설정이 가능)
MEDIA_ROOT = BASE_DIR / 'media'
# ...
# /askcompany/askcompany/urls.py
urlpatterns = [
# ...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
os.environ.setdefault
를 수정해줘야 한다.os.environ.setdefault
의 파라미터를 수정해준다. (파일 위치는 본문 상단의 그림 참조)os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'askcompany.settings') # 변경 전
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'askcompany.settings.dev') # 변경 후
DIRS에 장고 템플릿 로더가 참조하기 위한 경로를 추가한다. 보통 프로젝트 레벨의 경로를 이곳에서 관리한다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ # 장고 템플릿 로더가 참조하는 경로들
BASE_DIR / 'askcompany' / 'templates'
],
'APP_DIRS': True, # 장고 템플릿 로더가 앱 내의 템플릿 경로도 참조할지 정의한다.
# ...
}
]
위에서 지정한 templates경로 내에 layout.html 생성하자. (git에 의한 관리를 위한 추가)
/askcompany/askcompany/templates/layout.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Instagram with Ask Company</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
정적 파일 추가 (git에 의한 관리를 위한 추가)
# /askcompany/askcompany/settings/common.py
# ...
# File System Loader에서 참조할 정적 파일의 위치를 추가한다.
STATICFILES_DIRS = [
BASE_DIR / 'askcompany' / 'static'
]