Two Scoops of Django 3.x를 읽고 정리한 글입니다.
프로젝트 레이아웃은 코어 개발자 사이에서도 의견이 분분하다. 본 장에서는 가장 일반적으로 사용하는 방식을 소개한다.
다음은 기본적으로 제공되는 프로젝트 구성 방법이다.
django-admin startproject mysite
cd mysite
django-admin startapp my_app
mysite/
├── manage.py
├── my_app
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── mysite
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
=> (저자가 추천하는 프로젝트 레이아웃)
<repository_root>/ # Top level: 프로젝트 최상위의 절대 루트로서 <configuration_root>, <django_project_root>외에도 README.md, manage.py, .gitignore, requirments등이 포함되어있다. 또한 배포 및 실행에 필요한 파일들이 위치한다.
├── <configuration_root>/ # Second level: settings모듈과 base URLConf(urls.py)가 존재한다. `django-admin startproject`명령어를 사용할 경우에는 프로젝트 루트 내부에 존재하므로 이를 Repository Root로 이동해야 한다.
├── <django_project_root>/ # Second level: 실제 프로젝트 루트를 의미한다. `django-admin startproject`명령을 통해 프로젝트를 구성할 경우 <repository_root>에서 이 명령을 실행하면 된다.
다음은 다양한 브랜드의 아이스크림의 맛을 평가하기 위한 아이스크림 평가 프로젝트이다.
icecreamratings_project
├── config/ # 프로젝트 전반의 settings파일, urls.py, wsgi.py모듈이 존재한다.
│ ├── settings/
│ ├── __init__.py
│ ├── asgi.py
│ ├── urls.py
│ └── wsgi.py
├── docs/ # 개발자를 위한 프로젝트 문서 (25장 참조)
├── icecreamratings/ # 프로젝트의 <django_project_root>
│ ├── media/ # Development only!, 개발용 미디어 디렉토리 (사용자가 올리는 사진 등)
│ ├── products/ # 아이스크림 브랜드 관리하고 보여주는 앱
│ ├── profiles/ # 이용자 프로필을 관리하고 보여주는 앱
│ ├── ratings/ # 이용자가 매긴 점수를 관리하는 앱
│ ├── static/ # CSS, 자바스크립트 등의 정적파일 위치
│ └── templates/ # 시스템 통합 템플릿 파일 저장
├── .gitignore # 깃이 처리하지 않을 파일과 디렉터리
├── Makefile # 배포작업 및 매크로가 포함된 파일
├── README.md # 개발자를 위한 프로젝트 문서 (25장 참조)
├── manage.py # 내용 수정하지 말기 (5장 참조)
└── requirements.txt # django 3.x를 포함한 프로젝트에 필요한 python패키지 목록.
pyenv
나 아나콘다
를 사용하면 별도의 공간에서 관리된다.)~/proejcts/icecreamratings_project/ # project 경로
~/.env/icecreamratings/ # env 경로
주의: 내가 경험없는 코더라는 것을 알리기 싫다면, python의 venv나 node_modules등을 git에 추가하지 말자. (.gitignore등을 활용해서 제외해주자)
쿠키커터의 동작 방법
다음은 쿠키커터를 실행하는 방법이다.
# pyenv가 설치된 환경에서 진행하였다.
# django 3.x
$ pip install cookiecutter
$ cookiecutter https://github.com/pydanny/cookiecutter-django
You've downloaded /home/quique/.cookiecutters/cookiecutter-django
→ before.Isitokaytodeleteandre-downloadit?[yes]:no Do you want to re-use the existing version? [yes]: yes project_name [My Awesome Project]: icecreamratings project_slug [icecreamratings]:
description [Behold My Awesome Project!]: Support your Ice Cream → Flavour!
author_name [Daniel Roy Greenfeld]:
<snip for brevity>
$ cd icecreamratings
$ pyenv local icecreamratings
$ pyenv versions
$ pip install -r requirements/local.txt
$ git init .
$ pycharm .
위와같이 설정하면 쿠키커터를 실행한 디렉터리에 프로젝트가 생성된다.
구조를 보면 3.2, 3.3절에서 제안한 레이아웃 샘플과 유사하며 설정, 요구사항, 시작문서, 시작 테스트 모음 등이 포함된다.