[Django] 프로젝트 구조 설정, 만드는 순서
📖 개요
장고를 공부하기 위해 장고 공식 문서를 찾아보고 공부하였고 인스타그램 클론 코딩을 따라 진행하던 중 경로 설정이나 프로젝트 구조를 잘못하여 자꾸 에러가 나는 경우가 있어서 확실하게 정리하고 넘어가고자 글을 쓰게 되었다.
📚 가상환경 만들기
우선 프로젝트를 만들어준다
# venv 가상환경 만들기
py -m venv {가상환경 이름}
# 현재 환경의 모든 모듈 확인
pip freeze
# requirements.txt 파일에 현재 환경을 저장
pip freeze > requirements.txt
# project라는 가상환경 삭제
rmdir project
📚 Django, Django rest framework 다운로드
py -m pip install Django
pip install djangorestframework
📚 프로젝트 만들기
커맨드 라인에서 cd명령으로 코드를 저장할 디렉토리로 이동한 후, 아래 명령어를 수행한다.
django-admin startproject {프로젝트 이름}
그럼 현재 디렉토리에 {프로젝트 이름}라는 디렉터리를 생성할 것이다
📚 시크릿 키 값 분리
secrets.json이라는 파일을 프로젝트의 manage.py와 같은 위치에 만들어주고 아래와 같은 내용을 작성해준다.
{
"SECRET_KEY": "시크릿 키 값"
}
settings.py에 시크릿 키의 값이 적혀있던 부분을 아래와 같이 수정하여준다.
import os, json
from django.core.exceptions import ImproperlyConfigured
# SECRET_KEY 파일 위치
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
# secrets.json 파일에서 SECRET_KEY 가져오기
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
📚 장고 프로젝트의 구조
장고 프로젝트는 개발자마다 선호하는 프로젝트의 구조가 다르다고 하는데 나는 프로젝트의 구조 때문에 몇 번이나 프로젝트를 처음부터 시도를 한 경험을 바탕으로 아래의 프로젝트가 제일 깔끔하고 마음에 들어서 아래의 구조가 제일 좋은 거 같아서 이렇게 정리하려고 한다.
- 프로젝트 폴더/
- 프로젝트 이름/
- apps/
- app_name_1/
- app_name_2/
- app_name_3/
- templates/
- static
- css/
- font/
- img
- js/
📚 장고 프로젝트의 구조
설정 작업을 하기 전에 먼저 이해해야 할 것이 하나 있다. 바로 장고 프로젝트의 루트 드렉토리 경로 설정이다. 이는 settings.py의 BASE_DIR변수에 설정되어 있다.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
위 부분의 코드는 아래와 같다.
- __file__ : 현재 파일(setting.py)의 절대 경로
- os.path.abspath(__file__) : 인자로 주어지는 경로의 절대 경로
- os.path.dirname() : 인자로 주어지는 파일/ 폴더의 경로
이를 통해, BASE_DIR은 settings.py 파일이 위치한 폴더가 위치한 폴더, 즉 프로젝트 폴더를 가리킨다. 는 점을 알 수 있다. 물론 맨 위에 프로젝트의 구조와 같이 프로젝트 구조를 설정했다면 말이다.
또한 DATABASES 부분에도 'NAME' 구문을 아래의 구문으로 바꾸어 줘야한다.
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
📚 프로젝트 이름 변경 (원하는 이름으로)
위 프로젝트 구조에서 보면 프로젝트 밑에 프로젝트 이름이 한번 더 나오는데 굳이 바꾸지않아도 되지만 나는 작업을 하면서 너무 헷갈려서 바꿔주기로 하였다. 프로젝트 이름을 바꾸면 단순히 폴더명만 바꾸는 것이 아니라 추가적인 작업이 필요하다!
1. 프로젝트 이름/ manage.py 파일 내부 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{변경된 파일 이름}.settings")
2. 프로젝트 이름/ settings.py 파일 내부 수정
ROOT_URLCONF = '{변경된 파일 이름}.urls'
WSGI_APPLICATION = '{변경된 파일 이름}.wsgi.application'
3. 프로젝트 이름/ wsgi.py 파일 내부 수정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{변경된 파일 이름}.settings")
📚 앱 폴더 경로 설정
프로젝트 폴더에서 앱을 추가(생성) 하는 명령어는 아래와 같다.
python manage.py startapp {app_name}
그러면 기본적으로 프로젝트 폴더 하위에 해당 앱 폴더가 생성될 것이다. 그러나 맨 위에 프로젝트 구조와 같이 프로젝트를 관리할 경우 apps 폴더 내부에 앱들을 위치시켜주어야 한다. 또한 django 가 추가한 앱들의 경로를 찾아서 읽을 수 있도록 settings.py의 내용을 일부 수정해주어야 한다.
settings.py의 INSTALLED_APPS에 'apps.{app_name}'을 추가한다.
📚 템플릿 파일 경로 설정
템플릿 (. html) 파일들은 프로젝트 단위로 관리할 수도 있고, 앱 단위로 관리할 수도 있다. 나의 경우는 프로젝트 단위로 관리하는 것을 선호한다. 우선 프로젝트 폴더 하위에 templates 폴더를 만들어서 이곳에서 모든 템플릿 파일들을 관리하기로 한다. 이를 위해서 django가 템플릿 폴더를 읽을 수 있도록 settings.py의 내용을 일부 수정해 주어야 한다.
TEMPLATES에서 DIRS에 os.path.join(BASE_DIR, 'templates')를 추가한다.
📚 Static 파일 경로 설정
정적 파일의 관리 방법은 약간 더 복잡하다. 정적 파일 관리와 관련된 변수들이 복잡하게 존재할 뿐만 아니라, 로컬 개발 환경과 실서버 배포 환경을 따로 생각해줘야 하기 때문이다. 이에 대해서는 가능하다면 추후에 배우게 되면 다시 포스팅하고 우선적으로 정적 파일의 경로 설정과 간단한 내용만 적어 보려고 한다. 정적 파일 경로 설정 역시 settings.py 에서 해주면 된다.
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder',]
참고 링크 : https://it-eldorado.tistory.com/59
'BackEnd > Django, DRF' 카테고리의 다른 글
[Django] BD에 담겨있는 쿼리 값 HTML에서 사용하기 (0) | 2022.11.25 |
---|---|
[Django] DB 만드는 법 (0) | 2022.11.22 |
[Django] static 파일 이미지 HTML에 추가하기 (0) | 2022.11.20 |
[Django] 첫 번째 장고 앱 작성하기, part4 (0) | 2022.11.17 |
[Django] 첫 번째 장고 앱 작성하기, part3 (0) | 2022.11.15 |