この記事について

Djangoの管理コマンドを網羅した記事がほどんど見当たらなかったので自分なりにまとめました。
環境はDjango1.11/Windows7-64/Python3.6

※勉強不足のため効果がよくわからなかったオプションについては割愛しています。

dumpdataが「1レコードだけ標準出力に出せる」ことができることがわかったのが収穫です。様々な応用が利きそうです。

参考

コマンド一覧

manage.py

[auth]
    changepassword
    createsuperuser

[contenttypes]
    remove_stale_contenttypes

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver

共通オプション

-h, --help

ヘルプを表示

--version
バージョン表示

-v {0,1,2,3}
実行結果の出力レベル デフォルト1(normal)

--no-color
ターミナル用の色情報を出力しない

--noinput, --no-input
非対話モードで実行

--traceback
エラー時に例外CommandErrorを発生させる。スクリプトに組み込んでエラー処理がしたいときに使う

--database DATABASE
設定「DATABASES」に複数の指定がある場合、default以外への指定ができる。

--pythonpath PYTHONPATH
PYTHONPATHの追加指定

--settings SETTINGS
設定ファイルを指定して実行。

--settings 指定例

./mypj/local_settings.pyを使ってrunserverを実行する
manage.py runserver --settings mypj.local_settings

値はmanage.pyからの相対パスで指定(.pyは不要)

設定ファイルは環境変数=DJANGO_SETTINGS_MODULEでも指定できる

(Windows)set DJANGO_SETTINGS_MODULE=mypj.local_settings

[auth]

changepassword

ユーザー一名のパスワードを変更する

usage: manage.py changepassword [-h] [--version] [-v {0,1,2,3}]
                                [--settings SETTINGS]
                                [--pythonpath PYTHONPATH] [--traceback]
                                [--no-color] [--database DATABASE]
                                [username]

createsuperuser

管理者ユーザーを作成する。

usage: manage.py createsuperuser [-h] [--version] [-v {0,1,2,3}]
                                 [--settings SETTINGS]
                                 [--pythonpath PYTHONPATH] [--traceback]
                                 [--no-color] [--username USERNAME]
                                 [--noinput] [--database DATABASE]
                                 [--email EMAIL]

設定情報をオプションから設定し非対話式で実行もできる

[contenttypes]

remove_stale_contenttypes

利用していないcontenttypesの削除

usage: manage.py remove_stale_contenttypes [-h] [--version] [-v {0,1,2,3}]
                                           [--settings SETTINGS]
                                           [--pythonpath PYTHONPATH]
                                           [--traceback] [--no-color]
                                           [--noinput] [--database DATABASE]

contenttypesとは、モデルクラス間のリレーションの複雑化を抑え、相互参照を楽に行うための仕組み。
contenttypesではリレーションの設定をテーブル:django_content_typeで管理します。
このコマンドは、すでに使用されていない設定をdjango_content_typeから削除します。

[参考]
How to Use Django's Generic Relations

[django]

マイグレーション関連については別エントリを立てる予定

check

プロジェクトの構成チェック

usage: manage.py check [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                       [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                       [--tag TAGS] [--list-tags] [--deploy]
                       [--fail-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}]
                       [app_label [app_label ...]]

--deploy
本番環境向けのセキュリティチェック

--tag TAGS
チェックグループ(タグ)単位での実行。デフォルトタグは--list-tagsで確認できる。
[admin, caches, compatibility, database, models, templates, urls]

app_label
アプリ名 アプリケーションを限定。指定なして全アプリケーションをチェック

runserverやmigrate 実行時に暗黙的に実行される構成チェックを単独で実行する。
チェックの単位はアプリケーションや機能グループごとでも可能
deployオプションで本番環境向けのセキュリティ適合チェックが追加される。

compilemessages

多言語対応用の設定ファイルのコンパイル

usage: manage.py compilemessages [-h] [--version] [-v {0,1,2,3}]
                                 [--settings SETTINGS]
                                 [--pythonpath PYTHONPATH] [--traceback]
                                 [--no-color] [--locale LOCALE]
                                 [--exclude EXCLUDE] [--use-fuzzy]

設定ファイルのフォーマットはmakemessagesで作る

createcachetable

データベース上にキャッシュテーブルを作成する

usage: manage.py createcachetable [-h] [--version] [-v {0,1,2,3}]
                                  [--settings SETTINGS]
                                  [--pythonpath PYTHONPATH] [--traceback]
                                  [--no-color] [--database DATABASE]
                                  [--dry-run]
                                  [table_name [table_name ...]]

参考:Django公式 キャッシュフレームワークについて

dbshell

データベース管理用のシェルを起動する

usage: manage.py dbshell [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                         [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                         [--database DATABASE]

起動するシェルはデータベースのdjango.db.backends.<dbtype>.client.DatabaseClientで指定される
シェルは事前にインストールが必要(psql,mysql,sqlplus等)

diffsettings

設定ファイルの変更点確認

usage: manage.py diffsettings [-h] [--version] [-v {0,1,2,3}]
                              [--settings SETTINGS] [--pythonpath PYTHONPATH]
                              [--traceback] [--no-color] [--all]
                              [--default MODULE] [--output {hash,unified}]

--default MODULE
比較元となるファイルの指定
--all
設定が同じ項目も表示
--output {hash,unified}
表示形式の変更

現在の設定ファイルとデフォルトの設定ファイルを比較し、差分を表示する
設定内に関数が使われているところは評価後の値を比較する。
defaultオプションで他の設定ファイルを元に比較することもできる。

dumpdata

データベースの内容をJSON等の形式でエクスポートする。

usage: manage.py dumpdata [-h] [--version] [-v {0,1,2,3}]
                      [--settings SETTINGS] [--pythonpath PYTHONPATH]
                      [--traceback] [--no-color] [--format FORMAT]
                      [--indent INDENT] [--database DATABASE] [-e EXCLUDE]
                      [--natural-foreign] [--natural-primary] [-a]
                      [--pks PRIMARY_KEYS] [-o OUTPUT]
                      [app_label[.ModelName] [app_label[.ModelName] ...]]

--format
フォーマット。[XML/JSON/YAML]から選択。YAMLを使うときは追加パッケージが必要。
--indent
出力時のアウトラインフォーマット。未指定だと一行に出力される。
--exclude
アプリor特定モデルを除外する。
--all
全モデルを出力。(manage.pyをカスタムしてデフォルトで除外設定があっても)
--pks
特定のキーのデータのみ出力。モデルの指定が必要
--output
出力ファイル 未指定時は標準出力に表示

app_label
アプリケーション名、またはモデル名を指定

出力ファイルは、loaddataのfixtureファイルとして利用する。
標準的なフォーマットで出力するので他のアプリケーションで流用できる。
標準出力に出力して目視確認やログ出力で使うこともできる(OUTPUT未指定時)。

flush

全データ削除

usage: manage.py flush [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                       [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                       [--noinput] [--database DATABASE]

マイグレーション管理など一部を除くすべてのテーブルのデータを削除。
除外オプションは無い。実行前にsqlflushでSQLをよく確認すること。

inspectdb

現状のデータベーススキーマを元にmodelクラスを作成する。リバースエンジニアリング機能。

usage: manage.py inspectdb [-h] [--version] [-v {0,1,2,3}]
                           [--settings SETTINGS] [--pythonpath PYTHONPATH]
                           [--traceback] [--no-color] [--database DATABASE]
                           [table [table ...]]

内容は標準出力に出る。テーブル指定が可能。

loaddata

データベースにdumpファイルをインポート

usage: manage.py loaddata [-h] [--version] [-v {0,1,2,3}]
                          [--settings SETTINGS] [--pythonpath PYTHONPATH]
                          [--traceback] [--no-color] [--database DATABASE]
                          [--app APP_LABEL] [--ignorenonexistent] [-e EXCLUDE]
                          fixture [fixture ...]

--app
対象アプリケーションを指定

--exclude
アプリもしくはモデルを指定除外

--ignorenonexistent
マイグレーションにおいて、対象モデル・フィールドがなくなった場合はエラーを無視してインポート

fixtureファイル(dumpdataで出力したファイル)をデータベースに読み込む。
fixtureファイルはFIXTURE_DIRSに配置するか直接パスを指定する。
圧縮ファイルにも対応している。

[参考] Django公式
https://docs.djangoproject.com/en/1.11/ref/django-admin/#compressed-fixtures

データの読み込みはレコードレベルで行われる
・キーを持つデータが無いときは新規登録
・キーを持つデータがあるときは更新
※キーの異なる既存データはそのまま

バックアップのリストアとして利用する場合、対象テーブルは空にしておく必要がある。

makemessages

多言語対応用の設定ファイル作成

usage: manage.py makemessages [-h] [--version] [-v {0,1,2,3}]
                              [--settings SETTINGS] [--pythonpath PYTHONPATH]
                              [--traceback] [--no-color] [--locale LOCALE]
                              [--exclude EXCLUDE] [--domain DOMAIN] [--all]
                              [--extension EXTENSIONS] [--symlinks]
                              [--ignore PATTERN] [--no-default-ignore]
                              [--no-wrap] [--no-location]
                              [--add-location [{full,file,never}]]
                              [--no-obsolete] [--keep-pot]

makemigrations

マイグレーションファイルの作成

usage: manage.py makemigrations [-h] [--version] [-v {0,1,2,3}]
                                [--settings SETTINGS]
                                [--pythonpath PYTHONPATH] [--traceback]
                                [--no-color] [--dry-run] [--merge] [--empty]
                                [--noinput] [-n NAME] [--check]
                                [app_label [app_label ...]]

--dry-run
実行時のエラーの有無、マイグレーションファイル名の確認

--merge
conflictが発生している時、mergeファイルを作成する
mergeファイル:2つ以上の依存先を持つ空のマイグレーションファイル

--empty
空のマイグレーションファイルを作成する。定義変更以外の処理を追記して使う。

migrate

データベースにマイグレーションを適用する。

usage: manage.py migrate [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                         [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                         [--noinput] [--database DATABASE] [--fake]
                         [--fake-initial] [--run-syncdb]
                         [app_label] [migration_name]

--fake
データベースの定義変更を行わず、django_migrationテーブルに実行済みレコードを追加する。

sendtestemail

メールの動作確認を行う

usage: manage.py sendtestemail [-h] [--version] [-v {0,1,2,3}]
                               [--settings SETTINGS] [--pythonpath PYTHONPATH]
                               [--traceback] [--no-color] [--managers]
                               [--admins]
                               [email [email ...]]

設定ファイルのE-MAIL用設定を使って動作確認メールを送信する。
文面は定型、送信者は無し。複数のメールアドレスに送信可能

--manager
emailの指定に加えmanagerにも送信

--admin
emailの指定に加えadminにも送信

参考:naritoブログ Djangoで、メールを送信

Github:django/sendtestemail.py at master django/django

shell

usage: manage.py shell [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                       [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                       [--no-startup] [-i {ipython,bpython,python}]
                       [-c COMMAND]

管理用のコマンドシェルを起動し対話モードに入る、もしくはオプションで指定したコマンドを直接実行する
ipythonなどのインターフェースを選択できる

--no-startup
PYTHONSTARTUPを無視する(インターフェース未指定時)

-i {ipython,bpython,python}
インターフェースを変更する

-c COMMAND
コマンドを直接指定する

showmigrations

マイグレーションの一覧を表示する

usage: manage.py showmigrations [-h] [--version] [-v {0,1,2,3}]
                                [--settings SETTINGS]
                                [--pythonpath PYTHONPATH] [--traceback]
                                [--no-color] [--database DATABASE]
                                [--list | --plan]
                                [app_label [app_label ...]]

--plan
マイグレーションファイルを適用計画順に並べ替えて表示する

各アプリのマイグレーションファイルを合わせたものが一覧として表示される。
データベースに適用済みかどうか(django_migrationsテーブルの内容と照合)は[X]マークで確認できる。

sqlflush

flushで実行されるSQLの表示

usage: manage.py sqlflush [-h] [--version] [-v {0,1,2,3}]
                          [--settings SETTINGS] [--pythonpath PYTHONPATH]
                          [--traceback] [--no-color] [--database DATABASE]

sqlmigrate

migrateで実行されるSQLの表示

usage: manage.py sqlmigrate [-h] [--version] [-v {0,1,2,3}]
                            [--settings SETTINGS] [--pythonpath PYTHONPATH]
                            [--traceback] [--no-color] [--database DATABASE]
                            [--backwards]
                            app_label migration_name

--backwards
ロールバック時に実行されるSQLを表示する

sqlsequencereset

シーケンス情報をリセットする(1に戻す)SQLを出力する

usage: manage.py sqlsequencereset [-h] [--version] [-v {0,1,2,3}]
                                  [--settings SETTINGS]
                                  [--pythonpath PYTHONPATH] [--traceback]
                                  [--no-color] [--database DATABASE]
                                  app_label [app_label ...]

※シーケンスに対応していないDB(例:SQLite)では何も出力されない。

squashmigrations

複数世代のマイグレーションファイルを一つにまとめる。

usage: manage.py squashmigrations [-h] [--version] [-v {0,1,2,3}]
                                  [--settings SETTINGS]
                                  [--pythonpath PYTHONPATH] [--traceback]
                                  [--no-color] [--no-optimize] [--noinput]
                                  [--squashed-name SQUASHED_NAME]
                                  app_label [start_migration_name]
                                  migration_name

マイグレーション名が一つの場合は最初からToまで、2つ指定した場合はFrom Toとなる。
実行後、不要マイグレーションを削除するよう忠告される。削除は手動。

startapp

新規アプリケーションの作成

usage: manage.py startapp [-h] [--version] [-v {0,1,2,3}]
                          [--settings SETTINGS] [--pythonpath PYTHONPATH]
                          [--traceback] [--no-color] [--template TEMPLATE]
                          [--extension EXTENSIONS] [--name FILES]
                          name [directory]

startproject

プロジェクトディレクトリの作成

usage: manage.py startproject [-h] [--version] [-v {0,1,2,3}]
                              [--settings SETTINGS] [--pythonpath PYTHONPATH]
                              [--traceback] [--no-color] [--template TEMPLATE]
                              [--extension EXTENSIONS] [--name FILES]
                              name [directory]

test

テストフレームワークの実行

usage: manage.py test [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                      [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                      [--noinput] [--failfast] [--testrunner TESTRUNNER]
                      [-t TOP_LEVEL] [-p PATTERN] [-k] [-r] [--debug-mode]
                      [-d] [--parallel [N]] [--tag TAGS]
                      [--exclude-tag EXCLUDE_TAGS]
                      [test_label [test_label ...]]

勉強中なので今回は説明を割愛。いつか別エントリを立てます!

testserver

検証用サーバを起動する。

usage: manage.py testserver [-h] [--version] [-v {0,1,2,3}]
                            [--settings SETTINGS] [--pythonpath PYTHONPATH]
                            [--traceback] [--no-color] [--noinput]
                            [--addrport ADDRPORT] [--ipv6]
                            [fixture [fixture ...]]

指定されたfixtureを使ってrunserverとは異なるインスタンスを起動する。portを分けて複数起動可。
データベースはテスト環境利用され、データを変更しても終了時に破棄される。
現行の環境に影響させず、データ変更とかを色々試したくなった時に使う。

[sessions]

clearsessions

セッション情報の全削除

usage: manage.py clearsessions [-h] [--version] [-v {0,1,2,3}]
                               [--settings SETTINGS] [--pythonpath PYTHONPATH]
                               [--traceback] [--no-color]

具体的にはdjango_sessionsのデータの全削除。

[staticfiles]

詳細は別エントリを参照「Diangoのstaticファイルについて」
https://qiita.com/okoppe8/items/38688fa9259f261c9440

collectstatic

staticファイルの収集

usage: manage.py collectstatic [-h] [--version] [-v {0,1,2,3}]
                               [--settings SETTINGS] [--pythonpath PYTHONPATH]
                               [--traceback] [--no-color] [--noinput]
                               [--no-post-process] [-i PATTERN] [-n] [-c] [-l]
                               [--no-default-ignore]

findstatic

staticファイルの存在確認

usage: manage.py collectstatic [-h] [--version] [-v {0,1,2,3}]
                               [--settings SETTINGS] [--pythonpath PYTHONPATH]
                               [--traceback] [--no-color] [--noinput]
                               [--no-post-process] [-i PATTERN] [-n] [-c] [-l]
                               [--no-default-ignore]

runserver

アプリケーションの起動

usage: manage.py runserver [-h] [--version] [-v {0,1,2,3}]
                           [--settings SETTINGS] [--pythonpath PYTHONPATH]
                           [--traceback] [--no-color] [--ipv6] [--nothreading]
                           [--noreload] [--nostatic] [--insecure]
                           [addrport]

--noreload
ソースコード変更を自動追跡してリロードする機能を停止(DEBUG=True時のみ)

--nostatic
staticファイルを直接公開する機能を停止(DEBUG=True時のみ)

--insecure
本番環境でも開発環境のように直接staticを公開させる(DEBUG=False時のみ)