[Django]カスタムコマンドの作成方法と便利なコード

Djangoカスタムコマンド作成方法

Djangoでは manage.py の後にコマンドを入力するといろいろな操作を行うことができます。

今回はそんなカスタムコマンドを作成する方法と、作成が簡単になるサンプルコードの紹介です。

調べながらやると数分から、ハマると数時間かかる内容がコピペで一瞬でできるようになります。

カスタムコマンドの作成方法

  1. Djangoプロジェクトの中のアプリケーションの中に`management`フォルダを作成します。
  2. その中に`commands`というフォルダを作成します。
  3. “それぞれ”のフォルダの中に`__init__.py`という空のPythonファイルを作成します。
  4. manage.pyで「実行したいコマンド名.py」でPythonファイルを作成します。

djangoカスタムコマンド

※上記の例ではsend_mail.pyというカスタムコマンド用のファイルを作成しています。

タダのPythonファイルだとpython manage.py ファイル名では実行できないのでBaseCommandをインポートします。
from django.core.management import BaseCommand

そして、Djangoのモデルを利用したい場合はDjangoをセットアップする必要があるのでsettingsファイルを読み込みます。

import django,os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "プロジェクト名.settings")
django.setup()

あとはPythonファイルを単体で実行したときとmanage.pyから実行した時どちらからでも実行できるようにmain()関数でまとめたものを追加します。

最終的にできあがったのがこちらのファイルです。

カスタムコマンド用 チートファイル

いろいろ説明しましたが下記のファイルの「プロジェクト名」と「アプリ名」を置き換えて、実行したいコマンドを書くだけで大丈夫です。

Python

from django.core.management import BaseCommand
import django,os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "プロジェクト名.settings")
django.setup()

from アプリ名.models import *

def main():
    # ここに実行したいコマンドを記述
    pass


class Command(BaseCommand):
    def handle(self, *args, **options):
        main()

if __name__ == '__main__':
    main()

[Django] カスタムコマンドを実行

これでスムーズにカスタムコマンドを作ることができます。

カスタムコマンドを実行

上記のファイルを保存したらpython manage.py ファイル名で上記のファイルを実行できます。

この記事の序盤で作成したsend_mail.pyの場合は

python manage.py send_mailで実行できます。

カスタムコマンドをCronで実行

カスタムコマンドをCronから実行することで定期的にDjango内でプログラムの実行ができます。
Cronから実行する時はpythonとmanage.pyは絶対パスを使用してください。

Cron設定時の例
* * * * * /Users/myname/.pyenv/shims/python /Users/myname/project/app/manage.py ファイル名

最後に

サラッと書いて、この記事ではあまり触れなかったのですがDjangoモデルを実行するためにDjangoをセットアップするのに私はドハマリして何時間も浪費してしまいました。

↓この部分です。
import django,os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "プロジェクト名.settings")
django.setup()

この記事を見ていただいた方はハマること無く必要な作業に集中できるはずです(^^)

1 Comment

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください