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
以上!!
参考になる書籍

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

- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/06/09
- メディア: 単行本
- この商品を含むブログを見る

- 作者: 横瀬明仁
- 出版社/メーカー: NextPublishing Authors Press
- 発売日: 2018/08/26
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る

- 作者: 横瀬明仁
- 発売日: 2018/12/08
- メディア: Kindle版
- この商品を含むブログを見る