くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

DjangoでBatch処理(カスタムコマンド)

Djangoを使ったWebサービスを作っている際に、バッチ処理が必要になったので、その際の備忘録。

環境は、Django1.10.1とPython2.7

Djangoの機能を利用したバッチを作るならカスタムコマンド

いろいろ調べてみたところ、Djangoの機能を使いつつ、バッチ処理をするには、 manage.pyのカスタムコマンドを作るのがよいよう

refs: 公式のドキュメント(カスタム django-admin コマンドの実装 | Django ドキュメント | Django)

最終的には、

python manage.py <自作コマンド>

で実行できるようになる。

カスタムコマンドは、BaseCommandを継承したクラスCommandを実装すればOK

自作のコマンドを作るには、BaseCommandを継承したクラスを作成すれば良いらしい。
また、デフォルトでは、ファイルの置き場所はmanagement/commandsでなければならない。それ以外に配置しても認識されなかった。。。

$ cd app
$ mkdir -p management/commands && touch management/__init__.py management/commands/__init__.py

雛形はこんな感じ。あとは、handle()内に処理を書けばOK。
これでmodelsなども扱えるので、一括実行系の処理などもできるようになる。

from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):

  """ Main """
  def handle(self, *args, **options):
    # ここに実行したい処理を書く
    print "カスタムコマンドを実行"

あとは、cronなどで、よしなに定期実行すれば、良い感じに。

atasatamataraさんの記事(Django のコマンドを作って定期的に実行する - 憧れ駆動開発)で、 「cronにするときはちゃんとシェルスクリプトをつくっておこう」と書いてあったので、そうしよう

#!/bin/bash
export DJANGO_SETTINGS_MODULE=mysite.settings
. /path/to/virtualenv/dev/bin/activate
cd /path/to/src
python manage.py some_command

以上!!

参考になる書籍

基礎から学ぶ Django

基礎から学ぶ Django

  • 作者: 関根裕紀,新井正貴
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2019/07/01
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Python Django 超入門

Python Django 超入門

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》

参考にしたサイト様