Help us understand the problem. What is going on with this article?

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

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とかで外部から叩いてあげればバッチ処理ができますね

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away