필요 용어
- 장고 프로젝트 : 장고 웹 프레임워크를 기반으로 한 웹 애플리케이션을 지칭합니다.
- 장고 앱 : 프로젝트의 한 기능을 표현하기 위해 디자인된 작은 라이브러리를 지칭합니다.
##One Django Project has many Apps! #
앱 중 일부는 프로젝트 내부적으로 한번만 이용되고 재사용되지 않기도 합니다.
또는 때때로 외부 장고 패키지를 지칭하기도 합니다.
- INSTALLED_APPS : 프로젝트에서 이용하려고 settings.py 에 설정한 장고 앱들을 지칭합니다.
- Third Party Django Packages : 재사용이 가능한 플러그인 형태로 이용 가능한 Django 앱을 지칭합니다.
앱 이름 설정시 권장사항
- PEP-8 규약에 준수해야합니다.
- 단수형 명사를 사용합니다. (복수형 명사를 사용한 경우, 의미상 혼란을 야기할 수 있습니다.)
확신 없이는 앱을 확장하지 않도록 합니다
- 앱들은 될 수 있으면 작게 유지하도록 합니다.
- 작은 앱 여러 개 구성하는 것이 훨씬 나은 구성입니다.
Django Project Directory levels (Django 구성 레벨)
startproject : 삼단 방식(three-tiered) 기반 구조가 생성
최상위 레벨 : 저장소 루트 <repository-root>
- 배포에 필요한 다른 파일 등 중요한 내용이 위치합니다.
- 구성요소
- config : 프로젝트 전반에 걸친 settings 파일
- manage.py
- media : 개발 용도로 이용되는 디렉터리이며, 사용자가 업로드한 미디어 파일이 저장된다. 배포시에는 동작되지 않습니다.
- static : CSS, JS, 필요 Image 등 사용자가 아닌, App 자체에서 필요한 정적 파일들이 존재합니다.
- templates : 시스템 통합 템플릿 파일(html 파일 등)을 저장합니다
두 번째 레벨 : 프로젝트 루트 <django_project_root>
- 저장소 루트 디렉터리 안에서 실행하면 생성된 Django 프로젝트가 프로젝트 루트가 됩니다.
세 번째 레벨 : 설정 루트 <configuration_root>
- settings 모듈과 기본 URLConf (urls.py) 가 저장되는 장소입니다.
이는 __init__.py 모듈이 존재하는 파이썬 패키지 형태와 유사합니다. - django-admin.py start-project 명령으로 생성된 파일의 일부입니다.
- settings 모듈과 기본 URLConf (urls.py) 가 저장되는 장소입니다.
Modules in an App (앱 모듈)
전역 환경이 아닌, 앱 레벨에서 적용되는 모듈들
공통 앱 모듈
__init__.py
admin.py
forms.py
management/
migrations/
models.py
templatetags/
tests/
urls.py
views.py
비공통 앱 모듈
behaviors.py : 모델 믹스인 위치에 대한 옵션
constants.py : 앱 레벨에서 이용되는 세팅을 저장하는 장소의 이름
context_processors.py
decorators.py : 데코레이터가 존재하는 곳
db/ : 여러 프로젝트에서 이용되는 커스텀 모델이나 컴포넌트
exceptions
fields.py : 폼 필드 이용에 쓰인다. db/ 패키지 생성으로도 충분하지 못한 필드가 존재할 때 모델 필드에 이용됩니다.
factories.py : 테스트 데이터 팩터리 파일
helpers.py : 헬퍼 함수. 뷰와 모델을 가볍게 하기 위해 뷰와 모델에서 추출한 코드를 저장하는 장소입니다. (utils.py와 기능적으로 유사합니다.)
managers.py : models.py 가 너무 커질 경우, 일반적인 해결책으로 커스텀 모델 매니저가 여기에 이동됩니다.
middleware.py
signals.py : 커스텀 시그널을 제공하는 것에 대한 대안으로, 커스텀 시그널을 넣기 유용한 공간입니다.
utils.py : 뷰와 모델을 가볍게 하기 위해 뷰와 모델에서 추출한 코드를 저장하는 장소입니다.
viewmixins.py : 뷰 믹스인을 이 모듈로 이전함으로써, 뷰 모듈과 패키지를 더 가볍게 할 수 있습니다.
- 도서참고 : The Scoops of Django(프로그래밍인사이트)