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>
XRG(X Resource Graph)が気に入ったのでドネーション送ってきた
こういう軽い感じのソフトいいね。