Hatena::ブログ(Diary)

森 秀樹::電子工作の日記

2007/05/18 (金ようび)

[]TurboGearsちょっとやってみる 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を触った店。初めてオシロスコープを買った店。あまり数多く使ったという記憶はないが、私に与えた影響は一番大きかった店だと思う。

[]XRGのUniversal版が出ている XRGのUniversal版が出ているを含むブックマーク

1時間ほどかけてコンパイルに挑戦していたのに。仕方ない。ドネーション送ろう。あ・・・・fujisan.co.jpに頼んだ「紙の爆弾」の振込忘れていた。出してこよう。

[]XRG(X Resource Graph)が気に入ったのでドネーション送ってきた XRG(X Resource Graph)が気に入ったのでドネーション送ってきたを含むブックマーク

こういう軽い感じのソフトいいね。

トラックバック - http://d.hatena.ne.jp/hmori/20070518