背景
Python/Djangoで開発をすすめるにあたり、よく使うコマンドをまとめておきます。
先人たちの知恵をお借りするなどして解決できたことを、この場をお借りして感謝するとともに、大変恐縮ですが自分のメモとしても、こちらへまとめておきます。
環境
(本番環境)
- AWS EC2 (Amazon Linux 2)
 - Python 3.7.9 ※2020/12/10時点のAmazon Linux2でのデフォルト
 - Django 3.1.3
 - PostgreSQL 11.5 ※同上
 - Nginx 1.12 ※同上
 - Gunicorn
 - Putty 0.74
 
(開発環境)
- Windwos 10 Pro
 - Python 3.9.0
 - Django 3.1.3
 - PostgreSQL 13.1
 - Nginx 1.19.5
 - Gunicorn
 - Putty 0.74
 
0. 仮想環境の作成
仮想環境を作りたいディレクトリの直下へ移動したのちに、下記を実行します。
Python 3.x系で開発する際は、先頭は「python3」とすることが必須です。
$ python3 -m venv venv_<プロジェクト名>
1. django-adminコマンド
1-1. Djangoプロジェクトの自動作成
$ django-admin startproject <プロジェクト名>
2. manage.pyコマンド
manage.pyコマンドは、Python仮想環境に入り、manage.py の存在するディレクトリ内で行ないます。
仮想環境に入る
- 開発環境
 
$ cd <venv_プロジェクト名>\Scripts
$ activate.bat
(venv_<プロジェクト名>)$
- 本番環境
 
$ source ~/venv_<プロジェクト名>/bin/activate
(venv_<プロジェクト名>)$
- 共通
 
manage.pyがあるディレクトリに移動する
(venv_<プロジェクト名>)$ cd ~/venv_<プロジェクト名>/<プロジェクト名>
仮想環境から抜ける
(venv_<プロジェクト名>)$ deactivate
2-1. Djangoアプリケーションの自動作成
(venv_<プロジェクト名>)$ python manage.py startapp <アプリケーション名>
上記1-1.および2-1.を行なうことにより、下記ディレクトリ構成となります。
プロジェクト名                    1-1.で作成される
 ┣━ プロジェクト名              〃
 ┃   ┣━ __init__.py         〃
 ┃   ┣━ settings.py         〃 
 ┃   ┣━ urls.py             〃
 ┃   ┗━ wsgi.py             〃
 ┣━ manage.py                 〃
 ┗━ アプリケーション名           2-1.で作成される
     ┣━ migrations          〃
     ┃   ┗━ __init__.py  〃
     ┣━ __init__.py         〃
     ┣━ admin.py            〃
     ┣━ apps.py             〃
     ┣━ models.py           〃
     ┣━ tests.py            〃
     ┗━ views.py            〃
なお、WEBアプリケーション作成後のファイル構成は、以下の通りです。
コマンドで自動作成されないディレクトリやファイル(下記「**」印)は、自身で作成します。
下記は、ミニマム構成としてアプリケーションが1つの例を挙げています。
プロジェクト名                      プロジェクト全体をまとめるディレクトリ
 ┣━ プロジェクト名                プロジェクト全体に関わるファイルとまとめるディレクトリ
 ┃   ┣━ __init__.py           Pythonのパッケージであることを示すファイル
 ┃   ┣━ settings.py           プロジェクト設定ファイル
 ┃   ┣━ urls.py               プロジェクト用ルーティング定義ファイル
 ┃   ┗━ wsgi.py               デプロイ用ファイル
 ┣━ manage.py                   コマンド実行用ファイル
 ┗━ アプリケーション名             アプリケーション関連ファイルをまとめるディレクトリ
     ┣━ migrations            マイグレーションファイルを格納するディレクトリ
     ┃   ┗━ __init__.py    Pythonのパッケージであることを示すファイル
     ┣━ templates             テンプレートファイルを格納するディレクトリ
     ┃   ┗━ index.thml     テンプレートファイル **
     ┣━ __init__.py           Pythonのパッケージであることを示すファイル **
     ┣━ admin.py              管理サイト用設定ファイル
     ┣━ apps.py               アプリケーション構成設定ファイル
     ┣━ forms.py              フォーム定義ファイル **
     ┣━ models.py             モデル定義ファイル
     ┣━ tests.py              テストコード記述ファイル
     ┣━ urls.py               アプリケーション用ルーティング定義ファイル **
     ┗━ views.py              ビュー定義ファイル
2-2. 開発サーバーの起動
Djangoプロジェクトをローカルマシン環境で動かすことができる、開発用サーバーを起動する
(venv_<プロジェクト名>)$ python manage.py runserver
2-3. DBのマイグレーション
モデルに記述したDB(データベース)テーブル定義を基にマイグレーションファイルの自動作成を行ないます。
ここで言うマイグレーションとは、データベーステーブルの作成、変更、削除のことを指します。
2-3-1. マイグレーションファイルの作成
データベースへの変更内容を記すマイグレーションファイルを作成します。
(venv_<プロジェクト名>)$ python manage.py makemigrations
2-3-2. マイグレーションの実行
マイグレーションファイルの内容をデータベースへ反映します。
(venv_<プロジェクト名>)$ python manage.py migrate
2-3-3. マイグレーション状況の確認
マイグレーション履歴はDjangoが管理する django_migrations に保存されています。
この履歴データを用いて、マイグレーションの適用状況を確認できます。
下記の showmigrations を実行すると、一覧とその適用状況が [X] で表示されます。
[X] であるマイグレーションファイルは適用済みを意味します。
(venv_<プロジェクト名>)$ python manage.py showmigrations <アプリケーション名>
app
[X] 0001_initial
[X] 0002_remove_app_user
[ ] 0003_app_user
[ ] 0004_auto_20201210_0356
2-3-4. マイグレーションのロールバック実行
マイグレーションの適用をある時点までデータベースを戻す際に使います。
下記は 0001_initial 適用直後まで戻す場合の記述です。
$ python manage.py migrate <アプリケーション名> 0001_initial
再度、showmigrtions で確認すると、以下のようになるはずです。
(venv_<プロジェクト名>)$ python manage.py showmigrations <アプリケーション名>
app
[X] 0001_initial
[ ] 0002_remove_app_user
[ ] 0003_app_user
[ ] 0004_auto_20201210_0356
2-3-5. スーパーユーザーの作成
スーパーユーザー(サイト管理者)を作成します。
コマンドを実行すると、対話式に、ユーザー名、メールアドレス、パスワードの入力を求められます。
(venv_<プロジェクト名>)$ python manage.py createsuperuser
ユーザー名: administrator
メールアドレス: administrator@example.ne.jp
Password:                 
Password(again):                 
Superuser created successfully.
2-3-6. テストの実行
(venv_<プロジェクト名>)$ python manage.py test --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
上記はプロジェクト内の全テストを実行する際の記述です。
テスト範囲を限定して実行する際は、以下のように指定します。
- アプリケーション単位の実行 (app_a とapp_b アプリケーション内のテストを実行)
 
(venv_<プロジェクト名>)$ python manage.py test app_a app_b --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
- テストモジュール単位の実行 (test_views.py 内のテストを実行)
 
(venv_<プロジェクト名>)$ python manage.py test <アプリケーション名>.tests.test_views --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
- テストクラス単位の実行 (TestAppListView クラスを実行)
 
(venv_<プロジェクト名>)$ python manage.py test <アプリケーション名>.tests.test_views.TestAppListView --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
- テストメソッド単位の実行 (test_list_app_successメソッドを実行)
 
(venv_<プロジェクト名>)$ python manage.py test <アプリケーション名>.tests.test_views.TestAppCreateView.test_list_app_success --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
- ディレクトリ内のテストを実行 (app ディレクトリ内のテストを実行)
 
(venv_<プロジェクト名>)$ python manage.py test <アプリケーション名>/ --settings <プロジェクト名>.<開発環境用のプロジェクト設定ファイル>
2-3-7. インタープリタの実行
Djangoプロジェクトの設定を読み込み、インタープリタを起動します。
Djangoのライブラリを使えるため、主にモデルを呼び出し、データベース操作をテストする際に用います。
(venv_<プロジェクト名>)$ python manage.py shell
(関連)
【Python/Django】よく使うコマンドのまとめ(2) <パッケージのインストール>
【Python/Django】よく使うコマンドのまとめ(3) <PostgreSQLの操作>
【Python/Django】よく使うコマンドのまとめ(4)-前編- <本番運用:Amazon EC2 (Amazon Linux 2)>
【Python/Django】よく使うコマンドのまとめ(4)-後編- <本番運用:Amazon EC2 (Amazon Linux 2)>
(編集後記)
テスト範囲を限定して実行するコマンドは、入力時によく躓きます。
ここにまとめることで、躓きを抑えたいと思います。