Djangoを使ったバッチ処理の実装方法

2010年2月14日

Djangoでは、Webアプリ以外にバッチ処理を実装することができます。 

バッチ処理は、manage.pyのオプション処理として実現します。

実装するバッチ処理は「アクション」と呼ばます。


アクションをmanage.pyに追加するには、

プロジェクトディレクトリorアプリケーションディレクトリ 直下に

management/commands」というディレクトリを作成し、

commands配下にアクションを実行する スクリプトを実装することで実現されます。

例えば、「hogeapp」というアプリケーションディレクトリに

「hoge_action」というアクションを 実装する場合、以下のようにファイルを作成します。

1
2
3
4
5
6
$ cd hogeapp
$ mkdir management
$ mkdir management/commands
$ touch management/__init__.py
$ touch management/commands/__init__.py
$ emacs management/commands/hoge_action.py

上記コマンドで作成したhoge_action.pyでは、以下のようにクラスをインポートし、 

バッチ処理のエントリ関数である「handle()」メソッドをオーバーライドすることで 

自分のバッチ処理を記述します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from django.core.management.base import BaseCommand 

class Command(BaseCommand): 
    help = "[Description]\nHere is help..." 
    option_list = BaseCommand.option_list\ 
        + (make_option("--input", action="store", dest="ifn", default=None, 
                                   help=u"command help...") , 
            make_option(...) ,) 

    def handle(self, *args, **options): 
        optval1 = options['ifn'] 
        ...

バッチ処理実装後、以下のようにしてコマンドを呼び出すことができます。

1
$ ./manage.py hoge_action --input="brabara..."

また、helpメンバを定義している場合は、「./manage.py help」コマンドにて、 

アクション名を表示することができます。

hoge_actionのみに限定したヘルプは、 

./manage.py hoge_action --help」にて表示することができます。