Djangoでviewsを使わないでコマンドから直接プログラムを実行する方法について記載します。
カスタムコマンドファイル
アプリケーションにmanagementディレクトリを作ります。その中にcommandsディレクトリを作ります。ここがカスタムコマンドファイルを設置する場所になります。
sample.pyというカスタムコマンドファイルを作る場合、
appDir/management/commands/sample.py というパスになります。
from django.core.management.base import BaseCommand
import datetime
import calendar
from MyAPP.models import Sample
class Command(BaseCommand):
help = 'Explain this program'
def handle(self, *args, **kwargs):
# ここに処理を記載
まず、BaseCommandを読み込みます。
from django.core.management.base import BaseCommand
その他、使いたいものをインポートします。今回はdatetime, calender, Sampleモデルをインポートする例を記載しました。
class Command(BaseCommand): BaseCommandを継承するCommandクラスを作成します。
def handle(self, *args, **kwargs): を記載し、その下にプログラムを書いていきます。
カスタムコマンドファイルの実行
こちらはターミナルからファイル名を実行するだけです。 sample.pyの場合はsampleだけでOKです。
$ python manage.py sample
コンソールにメッセージを出力
カスタムコマンドではWebページで表示されないので、実行された結果などがわかりません。下記のようにコンソールに結果を表示させる記載をしておくと良いです。
self.stdout.write(self.style.SUCCESS('Successfully updated data'))