私の~/projects/
ディレクトリには2種類のDjango "プロジェクト"があり、どちらも少し構造が異なります。
- スタンドアロンのWebサイト
- プラグ可能なアプリケーション
スタンドアロンのWebサイト
ほとんどがプライベートなプロジェクトですが、そうである必要はありません。通常は次のようになります。
~/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(herokuへのデプロイ用)設定。
必要条件
むしろsetup.pyで直接要件を指定します。私が持っている開発/テスト環境に必要なものだけrequirements_dev.txt
。
一部のサービス(herokuなど)ではrequirements.txt
、ルートディレクトリにある必要があります。
setup.py
を使用してプロジェクトをデプロイするときに役立ちsetuptools
ます。これはに追加さmanage.py
れるためPATH
、manage.py
直接(どこでも)実行できます。
プロジェクト固有のアプリ
私はこれらのアプリをproject_name/apps/
ディレクトリに配置し、相対インポートを使用してインポートしていました。
テンプレート/静的/ロケール/テストファイル
これらのテンプレートと静的ファイルを、各アプリ内ではなく、グローバルテンプレート/静的ディレクトリに配置しました。これらのファイルは通常、プロジェクトのコード構造やPythonをまったく気にしない人によって編集されます。フルスタックの開発者が単独または小さなチームで作業している場合は、アプリごとのテンプレート/静的ディレクトリを作成できます。それは本当にただの好みの問題です。
同じことがロケールにも当てはまりますが、別のロケールディレクトリを作成すると便利な場合があります。
テストは通常、各アプリ内に配置するのが適切ですが、通常、より多くのアプリを連携してテストする多くの統合/機能テストがあるため、グローバルテストディレクトリは理にかなっています。
Tmpディレクトリ
VCSから除外されたプロジェクトルートに一時ディレクトリがあります。開発中にメディア/静的ファイルとsqliteデータベースを格納するために使用されます。tmp内のすべてのものは、問題なくいつでも削除できます。
Virtualenv
私は好むvirtualenvwrapper
とにすべてのvenvsを置く~/.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]
単一の管理コマンドを実行して環境を更新できるアプリを作成しましたが、これを1つのプロジェクトでのみ使用し、まだ実験中です。
スケッチとドラフト
テンプレートのドラフトをグローバル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
ます。