アプリケーションの作成¶
Django では「プロジェクト」の中に複数の「アプリケーション」を持つことが可能です。 「アプリケーション」として最も汎用的なものは管理画面であり、これは Django にバンドルされています。
「アプリケーション」は「プロジェクト」と疎結合に実装することも可能で、 うまく実装すると、複数のプロジェクトに同じアプリケーションを組み込めます。 たとえば、プロジェクトとアプリケーションが3つずつあったときに、次のように構成できます。
プロジェクト | アプリケーション |
---|---|
プロジェクト A | アプリケーション A |
アプリケーション B | |
アプリケーション C | |
プロジェクト B | アプリケーション A |
アプリケーション B | |
プロジェクト C | アプリケーション A |
アプリケーション C |
何をつくる?¶
Subversion のログのビューアーを実装してみます。 アプリケーション名は logviewer としておきます。
Subversion のログは TortoiseSVN で簡単かつ分かりやすく閲覧できますので、 機能としては似たもの (というか、劣化版) にします。 Webアプリケーションならば Trac や Redmine のタイムラインがこの機能を提供してくれます。
アプリケーションを作成する¶
manage.py を使ってアプリケーションを作成します。 virtualenv 環境を有効にしてからコマンドを実行しましょう。
> Scripts\activate
> cd sandbox
> python manage.py startapp logviewer
アプリケーション用のフォルダが作成され、いくつかのファイルも生成されます。 プロジェクトの全体は次のようになります。
> tree /A /F
D:.
| manage.py
| sandbox.sqlite
| settings.py
| settings.pyc
| urls.py
| urls.pyc
| __init__.py
| __init__.pyc
|
\---logviewer
models.py
tests.py
views.py
__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',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'logviewer' # <-- ここを追加
)
アプリケーションのデータモデルを定義する¶
Subversion などのバージョン管理システムは「チェンジセット」という単位で変更点を記録します。 英語で書くと “changeset” なので、このデータモデルを定義しましょう。 データモデルは logviewer/models.py に記述します。
logviewer/models.py
from django.db import models
class Changeset(models.Model):
revision = models.IntegerField()
committer = models.CharField(max_length=200)
commit_date = models.DateTimeField()
クラスがデータベースのテーブル、プロパティがテーブルのカラムに相当します。 RDBMS のイメージとしては、Changeset というテーブルがあり、そこには次の3つのカラムがあります。
- revision: 変更点のリビジョン番号。整数型。
- committer: 変更をコミットしたユーザー名。文字列型で、最大200文字。
- commit_date: 変更がコミットされた日付と時刻。時間用フィールドで、データベースの種類によって実装は異なる。
XxxField というものは他にもいくつか用意されています。 詳しくは Django の公式ドキュメント を参照してください。
データベースに反映させる¶
logviewer/models.py を変更したら、Django の管理スクリプトで変更を反映させます。 まずは、どのような SQL が実行されるのかを確認しましょう。
> python manage.py sql logviewer
BEGIN;
CREATE TABLE "logviewer_changeset" (
"id" integer NOT NULL PRIMARY KEY,
"revision" integer NOT NULL,
"committer" varchar(200) NOT NULL,
"commit_date" datetime NOT NULL
)
;
COMMIT;
Django が id というカラムを追加していますが、おおよそは予想通りの SQL ではないでしょうか。 そもそも SQL の意味が分からない、という場合は別途学習してください。 名前付けのルールなどは公式チュートリアルに記載されています。
次に、実際にデータベースに反映させます。
> python manage.py syncdb
SQLite のビューアー (ここでは Lita - SQLite Administration Tool を使用) で sandbox.sqlite を確認してみると、 logviewer_changeset というテーブルが作成されています。

Note
スキーマを変更するには、データベースから該当のテーブルを削除して、 再度 syncdb を実行してください。 (ちょっとメンドクサイ...)
管理画面から操作する¶
各アプリケーションで定義したデータモデルは、管理画面から操作可能にもできます。 logviewer/admin.py というファイルを 新規作成 しましょう。 (models.py と同じフォルダ)
logviewer/admin.py
from logviewer.models import Changeset
from django.contrib import admin
admin.site.register(Changeset)
テストサーバを起動 (manage.py で runserver を実行) して、 管理画面 にログインしてみます。 新しいデータが定義されているでしょう。

“Logviewer” の部分に “Changesets” があります。 “Add” をクリックすると、データを追加する画面に切り替わります。

必要な情報を入力して “Save” ボタンをクリックすると、データを登録できます。 登録したデータは sandbox.sqlite に反映されますので、別のビューアーでも確認できます。
データモデルを新規に実装し、それを管理画面でも操作したい場合には、 admin.site.register の部分を編集してください。