1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoで自分専用のコマンドを作る

Last updated at Posted at 2019-10-01

概要

Djangoをやっているといつも以下のようなものを入力することになるかと思います。

python manage.py runserver

このrunserverの部分は実は自分で独自に用意することができます。
なので、

python manage.py delete_all_models

とか作って、全てのモデルを消すためのコマンドも作成できます。

ここからは、その方法を紹介します。

コマンド作成の手順

ここでは簡単な手順のみを紹介するので、より詳細なものについては、調べていただきたく思います。

事前準備

コマンドを作成する前に、コマンドを保管する場所をappsのポジションに用意しておくことをお勧めします。
ここからは__commands__というフォルダにコマンドを登録しておく方法を紹介します。

プロジェクトのあるフォルダに以下のように、フォルダを作成します。

[プロジェクトのディレクトリ]
├ manage.py
├ [その他自分用のapps諸々]
└ commands
   └management
     └commands
       ├ [ここにコマンドを定義する]
        ...

次に、コマンドたちを認識させるため、settings.py(人によってはlocal用等分けてるかもしれませんが、そこは合わせてお願いします。)の_INSTALLED_APPS_をいつものように更新します。

settings.py
INSTALLED_APPS = [
    ...,
    "commands",
]

これで準備は完了です。

コマンドの作成

コマンドの作成方法はいたってシンプルで、フォーマット通りに commands > management > commands 内にファイルを追加するだけでOKです。

またもう一点重要なポイントは、ここで作る__ファイル名がそのままコマンド名になります。
サンプルとしてここからは、
"Hello Real World"__と__print__してくれるコマンドを作成します。

ファイルの作成

コマンド名は__HelloUnderWorld__としたいと思います。

HelloUnderWorld.py
from django.core.management.base import BaseCommand
class Command(BaseCommand):
	def handle(self, *args, **kwargs):
		print("Hello Real World")

__BaseCommand__を継承した__class Command__を作成し、その中の__handle__というメソッドを用意することで、コマンド実行時に呼び出されます。

コマンドの呼び出し

コマンドを実際に呼び出してみると...

>>> python manage.py HelloUnderWorld
Hello Real World

と行った具合になります。

まとめ

以上が最低限のコマンドを作成するための手段となります。
もちろん、ここでモデルをいじる事もできるので、定期的にモデルを確認するためにcronに登録して...なんて事も可能かと思います。

通常のpython同様引数を取る事もできますが、ひとまずはこのあたりで示させていただきます。

気が向きましたら、引数を取る方法も記載したいと思います。

お疲れさまでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?