TurboGearsをさわってみる 1

前から気になっていたPython製のWebアプリフレームワークTurboGearsを入れてみた。
これは、最近はやっているRuby on Railsなんかに代表される軽量なフレームワークで開発生産性の高さを売りにしている。
その設計思想として、

  1. DRY(Don't Repeat Yourself)原則 (同じことを繰り返さない)
  2. 設定より規約 (設定ファイルよりコーディング規約)

があげられる。

とりあえず簡単なToDoアプリケーションを作成してみる。
まずは、コマンドプロンプトから以下のコマンドを実行して、新しいプロジェクトを作成する。

> tg-admin quickstart pytodo

パッケージ名を聞かれるので、そのままでEnter

Enter package name [pytodo]:

ユーザ認証を使用するかどうか(たぶん)を聞かれるので、とりあえずEnter(No)

Do you need Identity (usernames/passwords) in this project? [no]

するといろいろログが表示されて、以下のフォルダ構成が作成される。(一部割愛)

[pytodo]
    |- [config]
    |- [sqlobject-history]
    |- [static]
    |- [templates]
        |- login.kid
        |- master.kid
        |- welcome.kid
    |- [tests]
    |- controllers.py
    |- json.py
    |- model.py
[pytodo.egg-info]
dev.cfg
README.txt
sample-prod.cfg
setup.py
start-pytodo.py

MVCパターンで作成されていて、モデルがmodel.py、コントローラがcontrollers.py、ビューがtemplatesモジュールに割り当てられている。

とりあえず起動してみる。起動の仕方は簡単で、start-pytodo.pyを実行するだけ。

> python start-pytodo.py

ブラウザで、http://localhost:8080 にアクセスする。
正常に画面が表示されればOK。

モデルの定義

まずは、モデルを定義する。
TurboGearsでは、モデルクラスを作って、そこから自動的にデータベース定義を作成することができる。
データベースに対するアクセスもほとんどSQLを使わない。(使えない?)モデルクラスとデータベース定義のマッピングには、SQLObjectが使われる。

ToDoタスクの属性はこんな感じ

  • タイトル
  • 詳細
  • 作成日

これをmodel.pyに実装する。

from sqlobject import *
from turbogears.database import PackageHub

hub = PackageHub("pytodo")
__connection__ = hub

# ここから追加
class Task(SQLObject):
    title = StringCol(length=24)
    description = StringCol(length=128)
    date = DateCol()

SQLObjectクラスから派生してクラスを作成する。
クラスの属性は、StringColクラスなどのデータベースの型毎に用意されたクラスで作成する。

次にこのクラスからデータベースのテーブルを作成する。
作成するテーブルのDDLを以下のコマンドで確認できる。

> tg-admin sql sql

CREATE TABLE task (
    id INTEGER PRIMARY KEY,
    title VARCHAR(24),
    description VARCHAR(128),
    date DATE
);

id列が主キーとして、自動的に作成されるみたい。
とりあえずこの定義でテーブルを作成する。テーブルを作成するには、以下のコマンドを実行。

> tg-admin sql create

コマンドが成功すると、dev.cfgファイルのsqlobject.dburiで指定したパスでデータベースファイルが作成される。
デフォルトでは、データベースにSQLiteを使用することになっている。