Django Logo

[ Django ] manage.py のコマンド チートシート

Django で開発してるといつもどのコマンド使えばいいか忘れちゃうんで、忘れないようにまとめました。
Django のバージョンは 1.10.3 です。

auth 認証関連

ユーザ認証機能などで利用します。サブコマンドは下記の2つです。それぞれこんな感じで使用します。

changepassword

$ python manage.py changepassword
Changing password for user 'ユーザ名'
Password:
Password (again):
Password changed successfully for user 'ユーザ名'

changepassword のコマンドは管理者サイトからでも編集できるので、あまり利用頻度は高くないです。

createsuperuser

$ python manage.py createsuperuser
ユーザID:
メールアドレス:
パスワード:

createsuperuser は必ず使います。というかこのコマンド実行しないと、いつまでたっても管理者サイトにアクセスできません。

debug_toolbar デバッグ関連

デバッグ時にコンソールを開くことができて、発行したSQLを確認したりできます。呼び出し方はこんな感じ。

debugsqlshell

$ python manage.py debugsqlshell
Python 3.5.2 (default, Nov 16 2016, 03:31:08)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

コンソールが起動するので、あとは確認したいクエリを書いていけばいいんですが、あまり使うことはないですね・・・。

django

Django のメインのサブコマンドになります。

check

$ python manage.py check
System check identified some issues:

WARNINGS:
?: (urls.W001) Your URL pattern '^$' uses include with a regex ending with a '$'. Remove the dollar from the regex to avoid problems including URLs.

System check identified 1 issue (0 silenced).

Django プロジェクトのチェックをしてくれます。状況に応じて ErrorWarning を出力するので、必要に応じて修正して、綺麗なDjango プロジェクトを作ります。

compilemessages

国際化対応の場合に利用します。いろんな言語に対応する必要があるシステムを作ってる場合には必須のコマンドかと思います。使い方はこんな感じです。

$ python manage.py compilemessages --locale=br_PT

createcachetable

$ python manage.py createcachetable <tablename>

tablename のところに設定した名前でキャッシュテーブルを作成します。これも普通に開発する分にはあまり使わない気がします。

dbshell

$ python manage.py dbshell

MySQL とか PostgreSQL のコンソールが開きます。

diffsettings

$ python manage.py diffsettings

現在の設定ファイルとデフォルトの設定ファイルの差分を表示してくれます。自分で何を設定して何がデフォルトの設定だったかとかが分からなくなった時とかに使えそうです。
設定ファイルって色々さわってると最初の状態がわからなくなることがよくあるので・・・。

dumpdata

$ python manage.py dumpdata <appname appname ...>

appname で指定したアプリケーションに関連するデータを全て出力します。データ量が多い場合などは注意が必要ですね。

flush

$ python manage.py flush

データベースを syncdb 直後の状態に戻します。データベースを綺麗にしたい時とかに使います。
自分は DB のテーブルを直接 TRUNCATE しちゃうことが多いですが。

inspectdb

$ python manage.py inspectdb

DB の情報を参照して、 models.py を出力してくれます。システムのリプレースの時などで DB は変更しないけど、 Web アプリは変更するケースで使えるかと・・・。
これがあれば、 DB を解析して models.py を一から作る苦労をしなくて良くなるかも??

loaddata

$ python manage.py loaddata <fixture fixture ...>

指定したフィクスチャ名と一致するファイルをデータベースにロードします。
テストデータを投入したり、初期データ投入する場合に使えそうです。

makemessages

$ python manage.py makemessages --all

翻訳対象にマークさ れている文字列全てを取り出します。 locale フォルダの中にメッセージファイルを作成します。
多言語対応が必要なシステムでは必須の機能ですね。

makemigrations

$ python manage.py makemigrations appname

appname で指定したアプリケーションのマイグレーションファイルを作成します。
models.py から DB の差分をマイグレーションファイルとしてまとめてくれます。 appname は省略可能です。
この機能は利用頻度がかなり高いです。

ただ、一点注意点が・・・。ここで生成されるマイグレーションファイルを Git などにコミットしてしまうと他の人の DB 環境と不一致を起こしてしまい、うまく動かなくことがあるので、マイグレーションファイルは gitignore に追加するなどして管理対象外のファイルとしておくことが望ましいです。
というか、そうしておかないと本番環境を構築する際などに100%失敗します。
DB の方でどのマイグレーションファイルまでを読み込んだかを覚えてるみたいで、そこがずれるとマイグレーションできなくなります。

migrate

$ python manage.py migrate

マイグレーションファイルを使って DB をマイグレートします。
makemigrations → migrate っていう流れで実行していきます。

sendtestemail

$ python manage.py sendtestemail <email...>

テストメールを送信してくれるみたいですが、使ったことがないので、あまりよく分からないです・・・。

shell

$ python manage.py shell

Python のコンソールが起動します。コンソール上で確認したいコードなどがあれば、このコマンドを使ってコンソールを呼び出して、コードを試してみることができます。

showmigrations

$ python manage.py showmigrations

アプリ名とマイグレーション名をリストで表示してくれます。
マイグレーションの漏れがないかなどの確認に使えます。あとはアプリ名を忘れちゃった時とか・・・。

sqlflush

$ python manage.py sqlflush

flush コマンドで実行される SQL 文を出力します。 flush で機械的にやるのが不安な場合や部分的に初期化したい場合などは、こちらのコマンドで SQL 文を確認してから、DBの初期化など行えばいいと思います。

sqlmigrate

$ python manage.py sqlmigrate

migrate コマンドで実行される SQL 文を出力します。マイグレーション時の SQL ログが欲しいとか言われた時には使えそうです。

sqlsequencereset

$ python manage.py sqlsequencereset <appname appname ...>

指定した appname のシークエンスをリセットするための SQL 文を出力します。
レコードを DELETE したけど、シーケンスはそのままって状態の時とかに使えそうですね。

squashmigrations

$ python manage.py squashmigrations appname

複数のマイグレーションファイルを一つにまとめてくれます。保守などで長期間メンテナンスしてると、どんどんマイグレーションファイルが増えてきて、マイグレーションの実行にも時間がかかるようになると思いますが、その時は squashmigrations でマイグレーションファイルを一つにまとめて綺麗にしちゃいましょう。

startapp

$ python manage.py startapp appname

appname のアプリケーションを作成します。アプリケーションに必要な最低限のファイルを appname フォルダ直下に作成してくれます。

startproject

$ python manage.py startproject projectname

projectname のプロジェクトを作成します。 settings.pyurls.py ファイルを作成してプロジェクトに必要なファイルを作成してくれます。

test

$ python manage.py test <appname>

appname で指定したアプリケーションのテストを実行します。コンソール上で成功/失敗を確認することができます。

testserver

$ python manage.py testserver <fixture fixture ...>

指定したフィクスチャを使って開発用サーバを起動します。フィクスチャのデータをテストデータとして使えます。

sessions セッション関連

clearsessions

$ python manage.py clearsessions

セッションをクリアします。あまり使うことはないかも??

staticfiles 静的ファイル関連

collectstatic

$ python manage.py collectstatic

settings.py で設定した STATIC_ROOT のパスに静的ファイルを集めてくれるコマンドみたいです。
本番環境で静的ファイルを STATIC_ROOT のパスに配置し、Webサーバにそのパスへのアクセス権をつけてあげることで、本番環境で静的ファイルを読み込むことができるようになります。

このコマンドを実行しないと Web サーバは静的ファイルを参照するために、自分で開発した静的ファイルのディレクトリや Django のフレームワーク自体が保持している静的ファイルのディレクトリに対して個別でアクセス権を設定しなければならなくなります。

本番環境へデプロイする際には忘れずに実行が必要なコマンドですね。

findstatic

$ python manage.py findstatic <filename>

相対パスで指定した filename のパスを探してくれます。テンプレートとかで呼び出してる静的ファイルの場所が分からなくなったりしたら使えるかも??

runserver

$ python manage.py runserver

開発用サーバが起動します。特に設定とか変更してなければ「 http://localhost:8000 」が起動すると思います。

最後に

manage.py のコマンドを一通り確認していきましたが、実際に使ってるコマンドって5つくらいしかありませんでした。
まだまだ Django の全てを使いこなせてないので、これからも精進していきたいと思います。
今回、コマンドを確認してきた中で一番使えそうなコマンドは「 squashmigrations 」だと思います。
マイグレーションファイルって一つにまとめられるってこと、初めて知りました。早速使っていきたいと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です