내 ~/projects/
디렉토리에 두 가지 종류의 Django "프로젝트"가 있으며 둘 다 약간 다른 구조를 가지고 있습니다.
독립형 웹 사이트
대부분 개인 프로젝트이지만 반드시 그럴 필요는 없습니다. 일반적으로 다음과 같습니다.
~/projects/project_name/
docs/ # documentation
scripts/
manage.py # installed to PATH via setup.py
project_name/ # project dir (the one which django-admin.py creates)
apps/ # project-specific applications
accounts/ # most frequent app, with custom user model
__init__.py
...
settings/ # settings for different environments, see below
__init__.py
production.py
development.py
...
__init__.py # contains project version
urls.py
wsgi.py
static/ # site-specific static files
templates/ # site-specific templates
tests/ # site-specific tests (mostly in-browser ones)
tmp/ # excluded from git
setup.py
requirements.txt
requirements_dev.txt
pytest.ini
...
설정
기본 설정은 프로덕션 설정입니다. 다른 파일 (예. staging.py
,
development.py
)에서 단순히 수입 모든 production.py
에만 필요합니다 변수를 무시하고.
각 환경마다 별도의 설정 파일이 있습니다 (예 : 생산, 개발. 테스트 (테스트 러너를 위해), 스테이징 (최종 배포 전에 확인으로) 및 heroku (헤 로쿠에 배포)로 설정 한 프로젝트도 있습니다.
요구 사항
오히려 setup.py에 요구 사항을 직접 지정하십시오. 내가 가진 개발 / 테스트 환경에 필요한 것만 requirements_dev.txt
.
일부 서비스 (예 : heroku)는 requirements.txt
루트 디렉토리에 있어야합니다 .
setup.py
를 사용하여 프로젝트를 배포 할 때 유용합니다 setuptools
. 그것은 추가 manage.py
에 PATH
내가 실행할 수 있도록, manage.py
직접 (어디서나).
프로젝트 별 앱
나는 이러한 앱을 project_name/apps/
디렉토리 에 넣고 상대적 가져 오기를 사용하여 가져 왔습니다.
템플릿 / 정적 / 로캘 / 테스트 파일
이 템플릿과 정적 파일을 각 앱 내부가 아닌 전역 템플릿 / 정적 디렉토리에 넣었습니다. 이 파일들은 보통 프로젝트 코드 구조 나 파이썬을 전혀 신경 쓰지 않는 사람들이 편집합니다. 단독 또는 소규모 팀에서 일하는 풀 스택 개발자 인 경우 앱별 템플릿 / 정적 디렉토리를 만들 수 있습니다. 정말 맛의 문제 일뿐입니다.
로케일에도 동일하게 적용되지만 때로는 별도의 로케일 디렉토리를 작성하는 것이 편리합니다.
테스트는 일반적으로 각 앱 내에 배치하는 것이 좋지만 일반적으로 더 많은 앱이 함께 작동하는 테스트를 수행하는 통합 / 기능 테스트가 많으므로 전역 테스트 디렉토리가 적합합니다.
TMP 디렉토리
프로젝트 루트에는 VCS에서 제외 된 임시 디렉토리가 있습니다. 개발 중에 미디어 / 정적 파일 및 sqlite 데이터베이스를 저장하는 데 사용됩니다. tmp의 모든 내용은 아무 문제없이 언제든지 삭제할 수 있습니다.
Virtualenv
나는 virtualenvwrapper
모든 venv를 ~/.venvs
디렉토리에 선호 하고 배치 하지만 tmp/
함께 보관하기 위해 내부 에 배치 할 수 있습니다.
프로젝트 템플릿
이 설정을 위해 프로젝트 템플릿을 만들었습니다. django-start-template
전개
이 프로젝트의 배포는 다음과 같습니다 :
source $VENV/bin/activate
export DJANGO_SETTINGS_MODULE=project_name.settings.production
git pull
pip install -r requirements.txt
# Update database, static files, locales
manage.py syncdb --noinput
manage.py migrate
manage.py collectstatic --noinput
manage.py makemessages -a
manage.py compilemessages
# restart wsgi
touch project_name/wsgi.py
rsync
대신 사용할 수 git
있지만 환경을 업데이트하려면 명령을 일괄 적으로 실행해야합니다.
최근에 [django-deploy][2]
단일 관리 명령을 실행하여 환경을 업데이트 할 수있는 앱을 만들었지 만 하나의 프로젝트에만 사용했지만 여전히 실험 중입니다.
스케치와 구배
글로벌 templates/
디렉토리 안에 배치 된 템플릿 초안 . sketches/
프로젝트 루트에 폴더 를 만들 수는 있지만 아직 사용하지 않은 것 같습니다.
플러그 가능 응용
이러한 앱은 일반적으로 오픈 소스로 게시 할 준비가되어 있습니다. django-forme 에서 아래 예제를 보았습니다.
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
디렉토리의 이름이 명확합니다 (바람직합니다). 테스트 파일을 앱 디렉토리 외부에 넣었지만 실제로는 중요하지 않습니다. 제공하는 것이 중요 README
하고 setup.py
패키지를 쉽게 설치된다, 그래서 pip
.