この記事について
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 ...]]
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にも送信
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時のみ)