2012年10月6日

Django の機能をコマンドラインやcronから実行する手順

概要

Django」の機能はWebアプリとして利用したことしかないので、スクリプトとして利用する方法を調査してみた。

ドキュメント

公式ドキュメント(英語)の「Writing custom django-admin commands」に手順が書いてある。

「django-admin.py」がそもそも Django で作成されているスクリプトで、ソースコードは「django/core/management/commands」に存在している。

手順

付属のツール「django-admin.py」を利用してプロジェクトの雛形を作成する。
「django-admin.py」は pip 等でインストールすると、適切な場所にインストールされるのでパスを通しておくと良い。 以下のように利用する。

django-admin.py startproject mysite

ディレクトリ構成は以下のようになる。

mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

次にアプリケーションを作成する。

python manage.py startapp example

アプリケーションが作成できたら、「management/commands」ディレクトリを作成する。

mkdir -p example/management/commands
touch example/management/__init__.py
touch example/management/commands/__init__.py

「settings.py」の「INSTALLED_APPS」にアプリケーションを有効化するために追加する。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 以下を追加
    'example',
)

「example/management/commands」以下にスクリプトを作成。とりあえず、「sample.py」の名前で以下のように作成。

# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand


class Command(BaseCommand):

    def handle(self, *args, **options):
        print 'さんぷるそーす'

ディレクトリ構成は以下のようになる。

mysite
├── example
│   ├── __init__.py
│   ├── management
│   │   ├── __init__.py
│   │   └── commands
│   │       ├── __init__.py
│   │       ├── sample.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

実行は以下のようにする。

python manage.py sample

「さんぷるそーす」と表示されれば成功。

まとめ

これで Django の機能をコマンドラインで利用できるようになった。結構便利。

blog comments powered by Disqus