Djangoでアプリケーション作っていて定期的に行いたい処理があった。
例えば決められた時間にデータを更新するとか
いくつかの方法を考えたけどカスタムコマンド使うのが簡単そうだったのでそのやり方を
大まかな流れとしては
- カスタムコマンドを作成
- 外から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とかで外部から叩いてあげればバッチ処理ができますね