TurboGearsちょっとやってみる

プロジェクトを作る

F:\proj\turbogears>tg-admin quickstart
Enter project name: parts
Enter package name [parts]:
Do you need Identity (usernames/passwords) in this project? [no]

遊ぶ

F:\proj\turbogears>cd parts
F:\proj\turbogears\parts>python start-parts.py

http://localhost:8080/ にアクセスする。あんたのアプリケーションは既に動いているゼ!って表示される。
ここまでは誰でもやるんだよね。

モデルを作りましょう

とりあえず、スケルトンだけで動いている、自分で作った記憶が無い「あなたのアプリケーション」を止めましょう。CTRL+Cでとめます。
さて、モデルを作るには2つの道があります。1つの道はtg-admin toolboxで起動して楽しくCatWalkで入力する方法と、2つ目の方法としては自分でモデルクラスを作る方法です。とりあえず、自分で作ってみましょう。
parts/parts/model.py

from turbogears.database import PackageHub
from sqlobject import *

hub = PackageHub('parts')
__connection__ = hub

class Parts(SQLObject):
    item_name = UnicodeCol()
    maker_id  = UnicodeCol()
    items     = UnicodeCol()
    comment   = UnicodeCol()

面倒だからこんなんでいいだろう。部品リストのつもりでおます。

F:\proj\turbogears\parts>tg-admin sql create
Using database URI sqlite:///F|\proj\turbogears\parts/devdata.sqlite

F:\proj\turbogears\parts>

これでデータベースをアクセスするクラスと、データベースが作成され、ついでにプロジェクト起動時にデータベースがオープンされます。こういうのをO/Rマッパって言います。何の略は知りません。

手作業でデータベースに登録してみましょう。

F:\proj\turbogears\parts>tg-admin shell
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
(CustomShell)
>>> new_part = Parts(item_name="Z80A", maker_id="Zilog", items="1", comment="")
>>> new_part.set()
>>> new_part
<Parts 1 item_name=u'Z80A' maker_id=u'Zilog' items=u'1' comment=u''>
>>> get_part= Parts.get(1)
>>> get_part
<Parts 1 item_name=u'Z80A' maker_id=u'Zilog' items=u'1' comment=u''>
>>> ^Z
Do you wish to commit your database changes? [yes]yes

こんな風に遊べるわけです。shellを終了させて、もう一度 Parts.get(1)をやっても取り出せます。外見はわかりやすいけど・・・中では大変な事をやっています。モデルだけでこんなに楽しい。
で、なんでcommitするか聞いてくるの?

コントローラを改造しよう

今のcontrollers.pyを別の名前にコピーして少々いじってみましょう。

from turbogears import controllers, expose, flash
# from model import *
# import logging
# log = logging.getLogger("parts.controllers")

class Root(controllers.RootController):
    @expose(template="parts.templates.hello")
    def index(self):
        # log.debug("Happy TurboGears Controller Responding For Duty")
        return dict(msg="hello world")

テンプレートを作る

hello.kid

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
    py:extends="'master.kid'">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
<title>Welcome to TurboGears</title>
</head>
<body>
<p py:content="msg">hear</p>
</body>
</html>

動かしてみる

初めて動かしたのと同じように、start-parts.pyを起動。とりあえず、自分なりのプログラムになった。で、作ったモデルはどうしたって?・・またそのうちに・・
でも、まあコントローラでdictを作って受け渡せば、テンプレートで置換ができるわけです。もう便利さは予測可能ですよね。
ダイバスターも終わったし寝る。

ニノミヤ閉店

へえ、そうなんだあ。初めて部品を買った店。初めてTK-80を触った店。初めてオシロスコープを買った店。あまり数多く使ったという記憶はないが、私に与えた影響は一番大きかった店だと思う。