LoginSignup
6
7

More than 3 years have passed since last update.

[Django]カスタムコマンドでバッチ処理をする

Posted at

Djangoでアプリケーション作っていて定期的に行いたい処理があった。
例えば決められた時間にデータを更新するとか

いくつかの方法を考えたけどカスタムコマンド使うのが簡単そうだったのでそのやり方を

大まかな流れとしては

  1. カスタムコマンドを作成
  2. 外からcronとか使ってそのコマンドを叩く

って感じです

カスタムコマンドを作る

Djangoやってるとおなじみの

python manage.py runserver

ってコマンドあるじゃないですか。今回はrunserverみたいなコマンドをオリジナルで作成します。
そのコマンドに自分の行いたい処理を記述しておくことでcronとか使って外部からそのコマンドを叩くだけでDjangoに処理を行わせることができます。

カスタムコマンドを作成するために必要なディレクトリを準備します

プロジェクト
    アプリケーション
        management
            commands

見にくいですが上記の階層になるように新たにmanagementとcommandsを用意してください
/プロジェクト/アプリケーション/management/commands
って感じです。

この時にアプリケーションは新規で作成しても既存の物を使っても問題なく動きます。新規で作成した時はsetting.pyでアプリケーションを追加しておくことを忘れないように。アプリケーションを追加しないとコマンドを認識してくれません

次にcommands内にpythonのファイルを作成します。この時の名前がコマンド名になります。

プロジェクト
    アプリケーション
        management
            commands
                test_command.py

pythonファイルは以下のような感じ

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        print('test command')

あとは

python manage.py test_command #test_command.pyじゃないことに注意

ってすれば

test command

って感じです
あとはcronとかで外部から叩いてあげればバッチ処理ができますね

6
7
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
6
7