Personal tools
You are here: Home なごぶろ Categories Turbogears

Turbogears

Up one level Turbogears
初めてのTurbogears

初めてのTurbogears


Turbogearsのアップグレード

Turbogearsはインストール訳をしただけで放置していたのでした。たとえ手に負えないものであっても何でも流行りのものはいじってみなきゃ気が済まない私は、とりあえずインストールのその後をやってみることにしたのです。

初心者ならではの嘘や間違えを量産すればきっと誰かが助けてくれて、しかもお勉強になってしまうのではないかというのはきっと妄想で、現実はもっともっと厳しいものになるはずです。でもそうやって人生の荒海にもまれることによって、きっと僕にはミネラルたっぷりの塩味がついていくのでしょう。だからこそ人の流す涙はしょっぱいのです。

ですがツッコミ、おしかり、アドバイス、その他諸々何でも大歓迎です(あ、でもspamはいやかも…)。

ところで私はインストール厨なのでインストール訳をしたときにTurbogearsをインストールしてたんですが、これは相当に古いはず、と思ってアップデートを試みました。アップデートガイドに従って

ez_setup.py -U setuptools
easy_install -Uf http://www.turbogears.org/preview/download/index.html TurboGears

としてみると0.9a8というバージョンが入りました。

easy_installというのは好きなパッケージを自動的にインストールしてくれるステキな人らしいです。apt, yum, emergeなどのパッケージ管理システムに似てますな。おっと、Rubyにも同じようなRubyGemsとかいう人を発見しました。どこの世界にも似たような人がいるものですね~。

easy_install --help

とするといろいろ説明が出てきます。-fは勝手に探してくれと指示するオプションですか。-Uは強制アップグレードらしいですね。ふむふむ、PyPI(Python Package Index: Python Cheese Shop)で最新版を探してインストールする、と。なるほどJZIでよく見かけるちーずしょっぷというのはこのリポジトリのことだったというわけですか。「強制(force)」という言葉にややひっかかるものの、まぁ、最新版をいじるのは嫌いじゃないからいいか、ということで準備はできましたー。

Turbogearsに関する理解を深める

深まるかどうかはわからないけど、Turbogearsについてもう少し理解しないと何もできなそうです。とりあえずよく耳にする言葉であるMVCについて考えてみます。

MVCというのはModel, View, Controllerの頭文字らしく、Turbogearsではこれらの担当者が次のように決まっているようです。

  • Model: SQLObject
  • View: Kid
  • Controller: CherryPy

MVCを分離してプログラミングしてやると何だかイイ感じに開発できるようなので、このように担当者が決まっていてそれぞれが力を合わせるらしいです。

とはいえ悲しいかな、私の頭で直感的に理解できるのはViewを担当するKidだけです。Kidはテンプレート言語。テンプレートといえばZPTです。ZPTはPloneをいじくる際によく見かけていますので「そういうものか」というふうに理解できます。しかし他の二者はちょっとわかりづらいです。

Modelを担当しているSQLObjectは、ORマッパーというものらしいです。SQLObjectについての簡単な説明自分で訳してみたやつを読み返してみると、どうやらPython的な文法でデータベースをいじくるもののようですね。データベースにデータを保存したり、変更したり、削除したり。そういうことを担当しているようです。本来ならSQLを書いて操作するような部分を、Pythonオブジェクトを操作するような感じで書けてしまうのがどれだけすごいのか、(プログラミングなんてしたことがないので当たり前ですが)あんまり実感できないのですが、柴田さん大谷さんがほめまくってるのを見るときっとすごいんだなと予想できます。

Controllerを担当しているCherryPyについての簡単な説明自分で訳してみたやつを読み返してみると、やたらとメソッドという言葉を連呼していることに気づきます。私の頭の中ではメソッドというのは関数のことだというふうに記憶されています。関数というのは機能を決めるものだから、きっとControllerであるところのCherryPyも機能を決めているのでしょう。機能というのはデータというか値というかそういうものを足し算したり引き算したり掛け算したりすることだと思うので、きっとCherryPyもそんなふうにデータを料理する人なのでしょう。

ということで初心者ならではの大胆予想をすると

 Model: SQLObject
データベース担当。バックエンドのデータベースにデータを保存したり操作してくれる人。
 View: Kid
(x)html担当。データをWebインターフェイス(ブラウザ)に表示してくれる人。
 Controller: CherryPy
 計算担当。ブラウザとかデータベースとかからやってきたデータを加工してくれる人。
みたいな感じかなぁ。

そろそろ眠いので寝なきゃと思うんだけど、結局今日はTurbogearsのアップグレードしかしてないという…。

TurboGearsをWindowsにインストールする TurboGearsをWindowsにインストールする
Size 2.2 kB - File type text/html
TurboGears: CherryPy Web Controller TurboGears: CherryPy Web Controller
Size 1.4 kB - File type text/html
TurboGears: SQLObject Database Mapping Library TurboGears: SQLObject Database Mapping Library
Size 3.2 kB - File type text/html
TurboGears: Kid Template System TurboGears: Kid Template System
Size 2.9 kB - File type text/html
Category(s)
Turbogears Turbogears
The URL to Trackback this entry is:
http://nagosui.org:8080/Nagosui/COREBlog2/learning-turbogears/tbping

Turbogearsのプロジェクトを作る

何を作るか考える

さて何を作ろう。そもそも本来は作りたいものがあって、それを実現するためにTurbogearsを作るハズなんですが、毎度ながら全く本末転倒な状況になってしまっています。まぁそれは毎度のことなのでヨシとしておいて、とにかく作るものを考えないと。

とはいえ初心者が作れるものなんて限られてそうだからなぁ。データベース+Webインターフェイスでお試しアプリとかいうと、スケジューラとかアドレス帳とかがあるけど、スケジューラとかは完全に無理。カレンダー的なものなんて無理すぎ。アドレス帳は微妙だけど普段使わないからなぁ。

ということで、ジャンクお菓子評価プロジェクトにしませう(・∀・)

tg-admin hoge

Turbogearsでプロジェクトをマネージメントしてくれるのはtg-adminというツールです。ヘルプを見てみると何ができるのかが判明します。tg-admin --helpしてみると

Available commands:
      i18n  Manage i18n data
      info  Show version info
quickstart  Create a new TurboGears project
     shell  Start a Python prompt with your database available
       sql  Run the SQLObject manager
   toolbox  Launch the TurboGears Toolbox
    update  Update an existing turbogears project

ということらしいです。こういうのは片っ端から試してみるのがよろしいですな。とはいえまだプロジェクトを作っていないので使えるものも使えません。ということで早速プロジェクトを作ろうじゃありませんか。

とりあえずはクイックスタートしてみればよろしいようで。

tg-admin quickstart

とすると3つのことを尋ねられました。プロジェクトの名前はJUNKSNACKとでもしておきましょう。

Enter project name: JUNKSNACK
Enter package name [junksnack]:
Do you need Identity (username/password) in this project ? [no]

パッケージ名は小文字推奨ですかな。今回はユーザ管理なんて難しいことはこれっぽっちも考えてないのでデフォルトのnoでいきます。

何かいろいろなものが生成されたようですが、これがひな形になるようですね。

自動的に生成されたファイルたち

プロジェクトを作ったところでtg-adminコマンドを満喫してみようではありませんか。

i18n
国際化のファイルを作るためのコマンドだとは思うけれど、よくわからないので放置
info
現在使っているTurbogearsに関する情報を見ることができる
quickstart
今さっき使った。プロジェクトのひな形を作る
shell
シェルを起動する
sql
SQL関連のツールだけど、まだデータベース作ってないよパパン…
toolbox
スゲー。ブラウザ上でいろいろできちゃうツール群
update
 現在のプロジェクトをアップデートする。試しにやってみたら、プロジェクトを何もいじってないはずなんだけど、上書きしますか的なメッセージが出てきて怖くなったので止めた
いろいろありますが、toolboxというのがすごいです。いや、すごいかどうかはわかりませんがカッコイイのは確かです。Turbogearsサイトにtoolboxについてのドキュメントがありました。おっと、昔柴田さんのとことかで見たCatwalkというのもこのツールの一部だったんですね。

ちなみにtoolboxを起動するにはtg-admin toolbox startとするのですが、プロジェクトのフォルダに入ってからやらないと

Note: Some functions are not available as the toolbox was not
 started in a valid TurboGears project directory.

というふうに怒られてしまいます。というか怒られてしまいました(´ω`)

まぁ、とにかく難しそうだけど楽しそうです。そろそろおねむの時間ですが、今日はプロジェクトを作成しただけでした。このプロジェクト、果たしていつになったら完成するんでしょうか…。

ツールボックス

Category(s)
Turbogears Turbogears
The URL to Trackback this entry is:
http://nagosui.org:8080/Nagosui/COREBlog2/create-project/tbping

TurboGears関連記事

Posted by Twisted Mind in TurboGears at Aug 06, 2006 05:38 PM
Turbogearsのプロジェクトを作る — nagosui.org http://nagosui.org/Nagosui/COREBlog2/create-project Turbogearsのプロジェクトを起動する — nagosui.org http://nagosui.org/Nagosui/COREBlog2/start-project 素晴らしく丁寧に説明されております。 素晴らしい。 間違ってトラックバックを送っておこう。

Turbogearsのプロジェクトを起動する

アプリが起動した

今日も元気に(ホントは眠いけど…)Turbogears!と思ってフォルダを開いてみたら、いつの間にか「locales」というフォルダが増えていました。おそらく前回tg-admin i18nを実行したためだと思います(すぐCtr+Cしたけど…)。

localesフォルダが増えてた

まぁそれはどうでもよいとして、前回まででとりあえずプロジェクトのひな形ができあがったわけで、この次は何をしたらいいのでしょうか。よくわからないのでネット上を徘徊してみると、start-PROJECT.pyスクリプトを実行すれば(特に何もいじらずとも)アプリケーションが起動するみたいです。ということで

python start-junksnack.py

としてみました。するとlocalhost:8080で画面が確認できました。しかもご丁寧にもこの後の開発手順が書いてある(・∀・)

1.  Edit your project's model.py to create SQLObjects representing the data you're working with
2. Edit your dev.cfg file to point to the database you'll be using
3. Run "tg-admin sql create" to create the tables in the database
4. Edit controllers.py to add the functionality to your webapp
5. Change the master.kid template to have the headers and footers for your application.
6. Change welcome.kid (this template) or create a new one to display your data
7. Repeat steps 4-6 until done.
8. Profit!

さっそく次へ進みたいと思います。というのはウソで、ちょっと足を止めてstart-junksnack.pyを見てみます。だっていきなり手順1がちょっと難しそうなんだもん。

start-junksnack.pyの冒頭部はいろんなモジュールのインポートです。

#!C:\Python24\python.exe
import pkg_resources
pkg_resources.require("TurboGears")

import turbogears
import cherrypy
cherrypy.lowercase_api = True

from os.path import *
import sys

よくわからなかったのがpkg_resourcesとcherrypy.lowercase_apiですが、pkg_resourcesというのはegg関係の人らしく、Turbogearsがインストールしてないとダメだよということのようです。まぁ、見た感じそのままですね…。

またcherrypy.lowercase_apiは、CherryPyのサイトに何か書いてありました。CherryPyのAPIはCamelCaseで書かれていたのですが、それをlowercase_with_underscoresで書くようになった、と。しかも何かちょっとだけ起動が速くなるようですね(・∀・)

There's a new "cherrypy.lowercase_api" flag, so that users can say "I'm using the new lowercase API" and get a (small) speed boost from it.

start-junksnack.pyの残りの部分は以下の通り:

# first look on the command line for a desired config file,
# if it's not on the command line, then
# look for setup.py in this directory. If it's not there, this script is
# probably installed
if len(sys.argv) > 1:
    turbogears.update_config(configfile=sys.argv[1],
        modulename="junksnack.config")
elif exists(join(dirname(__file__), "setup.py")):
    turbogears.update_config(configfile="dev.cfg",
        modulename="junksnack.config")
else:
    turbogears.update_config(configfile="prod.cfg",
        modulename="junksnack.config")

from junksnack.controllers import Root

turbogears.start_server(Root())

なるほど、ほんとは設定ファイルを指定できるわけですか。

最初にsys.argvを見て、設定ファイルが引数として指定されていればそれを使うということですね。で、設定ファイルが指定されていないときは、setup.pyがあればdev.cfgを、そうでなければprod.cfgを使うわけですか。名前からすると、dev.cfgは開発用の設定ファイル、prod.cfgは本番用の設定ファイルという認識でよいのですかな…?

そのあとのcontrollersとかstart_serverとかはsite-packagesの中のTurbogears-VERSION.eggフォルダの中のファイルの中にあったけれど、難しそうだったので深追いするのは止めました(*´Д`)頭がこんがらがった~。あー、ホントに頭悪いなー。困った困った。

あー、朝だ。1.5hほど寝ておこう。おやすみなさぃ。

Category(s)
Turbogears Turbogears
The URL to Trackback this entry is:
http://nagosui.org:8080/Nagosui/COREBlog2/start-project/tbping

TurboGears関連記事

Posted by Twisted Mind in TurboGears at Aug 06, 2006 05:38 PM
Turbogearsのプロジェクトを作る — nagosui.org http://nagosui.org/Nagosui/COREBlog2/create-project Turbogearsのプロジェクトを起動する — nagosui.org http://nagosui.org/Nagosui/COREBlog2/start-project 素晴らしく丁寧に説明されております。 素晴らしい。 間違ってトラックバックを送っておこう。

Turbogearsプロジェクトのモデルを作る

前回まででとりあえずプロジェクトは起動できたのですが、ただ単にひな形を起動したというだけでここまでなら猿でもできるところです。ここから先がいよいよプロジェクトを作っていく段階に入りますが、ということはいよいよ私の脳みそもついていけなくなってくるわけです…。しかもこういうときに限って、プレッシャーがかかるトラックバックとかが打ち込まれたりしてしまうのです…orz。

モデルの担当者はSQLObjectですが、SQLObjectにデータをいじってもらうためにはどんなデータベースにするかを最初に決めておかなければならないでしょう。つまりまずはSQLObjectに「これこれこういう感じで、カラムはこうで、データの型はこうで…」といったようなことを教えてあげる必要があるに違いありません(ネットを徘徊してみた結果からの「予想」でしかありませんが)。

しかもそれ以前にデータベースの用意をしておく必要があるじゃないですか。前途多難であります。ということでやらなければならないのは…

  1. データベースのセットアップ
  2. pythonからデータベースに接続するためのモジュールのセットアップ
  3. データベース設定ファイル(dev.cfg)の編集
  4. モデルの編集(model.py)とデータベースの生成

という感じになりましょうか。

1.データベースのセットアップ

SQLObjectがいじることのできるデータベースはいくつかあるようですが、とりあえず有名どころのPostgreSQL、MySQL、SQLiteなんかはフツーに使えるようです。

実は私は今までMySQLしか使った(というか「触った」)ことがないのですが、SQLiteが軽くていいらしいので今回はSQLiteを使おうと思います。サーバ・クライアント型ではなく、データベースもファイル単位で扱うということで、何だかお手軽感がTurbogearsにぴったりな気がします。

とりあえずhttp://www.sqlite.org/download.htmlからsqlite-3_3_6.zipおよびsqlitedll-3_3_6.zipをダウンロードしてインストールしてみることにします。とはいえインストーラがついているわけではなく、アーカイブを解凍するとexeファイルが出てくるので特に困ることもないとは思いますが…。

  1. 「C:\sqlite」というフォルダを作る
  2. sqlite-3_3_6.zipおよびsqlitedll-3_3_6.zipを解凍して出てきたものたち(sqlite.exe, sqlite3.dll, sqlite3.def)をそのフォルダに放り込む
  3. パスを通す(マイコンピュータを右クリック→詳細設定タブをクリック→環境変数ボタンをクリック→システム環境設定の「Path」というやつを選んで編集ボタンをクリック→いろいろ書いてある一番最後に「C:\sqlite;」を追加する)

という感じにしてやりました。

一応確認のためいくつかコマンドなど試してみました。

#hogeというデータベースを生成してデータベースに入る
sqlite3 hoge
#hogeというテーブルをカラムの型を指定して生成
sqlite> create table hoge(id integer,
 name varchar(20),
 primary key (id)
);
#hogeテーブルにデータを挿入
sqlite> insert into hoge(name) values('fuga');
sqlite> insert into hoge(name) values('fugu');
#hogeテーブルに格納されているデータを表示
sqlite> select * from hoge;
1|fuga
2|fugu
#カラムの型を指定せずにhageというテーブルを生成
sqlite> create table hage(id integer primary key, name);
#データベース内にあるテーブルを表示
sqlite> .table
hoge hage
#hogeテーブルを削除
sqlite> drop table hoge;
#ちゃんと無くなってるか確認
sqlite> .table
hage
#データベースから出る
sqlite> .exit

た、たのしい…。

sqlite3 hogeで勝手にデータベース(hogeというファイル)が生成されるのがカッコイイです。データの型を指定しなくてもテーブルが作れてしまう(11行目)とかいうところにPython風味を感じたりもします。

2.データベース接続モジュールのセットアップ

さてさて次はpythonからデータベースに接続するためのモジュールをインストールしないといけません。今回はsqliteを使うので、pysqliteというやつをインストールします

MySQLを使う場合はmysql-python、Postgresqlを使う場合はpsycopg2などをインストールすればいいのでしょうか。いずれもeasy_installでインストールできるようですが、WindowsバイナリのPythonを使っている私の環境ではエラーが出ました。

pysqliteはeasy_installのリポジトリに含まれているので

easy_install pysqlite

で簡単にインストールできます。

pysqliteのサイトにある例を参考にして少し使ってみることにします。

以下のような内容のhoge.pyを作成します。

from pysqlite2 import dbapi2 as sqlite

con = sqlite.connect("hoge")
con.execute("create table hage(id integer primary key, name)")

これを実行すればhogeデータベースにhageテーブルが作成されるはずです。

python hoge.py
sqlite3 hoge
sqlite> .table
hage

た、たのしい…。どうでもいいことでも思い通りに動くと楽しいですね(・∀・)

3.Turbogearsプロジェクトのデータベース設定

さてさてpythonからsqliteを使えるようにセットアップできたので、次はTurbogearsのプロジェクトからsqliteを使うように設定ファイル(dev.cfg)を編集します。dev.cfgには最初からサンプルが記載されているので、こいつをちょこちょこっといじくってやればいいですね。

デフォルトではデータベースの設定は

# If you have sqlite, here's a simple default to get you started
# in development
sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite"

と書いてありますが、私は今Windows上で作業しているのでこれをコメントアウトし、

# for Windows users, sqlite URIs look like:
# sqlobject.dburi="sqlite:///drive_letter:/path/to/file"

にならって、

sqlobject.dburi="sqlite:///C:/Documents and Settings/nyusuke/My Documents/Turbogears/JUNKSNACK/devdata.sqlite"

としてやりました(データベースファイルは後でtg-adminコマンドによって自動生成されるので今は存在してなくてもいい)。

4.モデルの編集とデータベースの生成

さてさて次はテーブルを定義してやります。というかその前にプロジェクトの中身をもう少し詰めないといけないですね…。プロジェクトにはどんなデータベースが必要なのかなぁ。

今回のプロジェクトはJUNKSNACKという名前で、ジャンキーなスナック菓子の評価を表示するプロジェクトです。もちろん追加や削除、編集もできるものとします。データとしては、お菓子の名前は絶対必要です。また評価としてはコメントによる評価もいいですが、これ以外にも数字によるランク(5段階の評価)も付けることにしましょう。

ということでデータベースには

  • お菓子の名前(文字列)
  • 5段階評価(整数)
  • 一言コメント(文字列)

を保存しておくことにしましょう。

このテーブルをクラスとして表現してやります(=モデル)。

class snack(SQLObject):
name = StringCol(length=64)
eval = IntCol()
comment = StringCol()

カラムの型はいろいろ使えるようです。詳しくはSQLObject本家のドキュメントに書いてありました。日本語訳はPyJUGのSQLObjectドキュメントにあります。

以上をmodel.pyに追記して完成ヾ(゜∀゜)/

これであとはtg-admin sql createとすればテーブルが生成される…ハズ…。

ポチッとな。

……

………ぅぅううぉぉぉおおおおお!!!

データベースファイル発見。

データベースが生成された

中身を確認してみます。

sqlite3 devdata.sqlite
sqlite> .table
snack
#snackテーブルの構造を確認
sqlite> .schema snack
CREATE TABLE snack (
id INTEGER PRIMARY KEY,
name VARCHAR(64),
eval INT,
comment TEXT
);

できてますねヾ(゜∀゜)/

疲れたので今日はここまで~。

Category(s)
Turbogears Turbogears
The URL to Trackback this entry is:
http://nagosui.org:8080/Nagosui/COREBlog2/edit-projects-model/tbping

CatWalkでデータベースにレコードを追加

CatWalkはカッコイイ

データベースをいじろうとして試行錯誤している間に間違えに気づきました。前回データベースを生成するときに、nameカラムおよびcommentカラムの型に「StringCol」を指定していたのですが、これだと日本語が入力できないのですね(asciiのみ)。日本語入力を可能にするためには「UnicodeCol」である必要があります。ですので、

tg-admin sql drop

で現在のsnackテーブルを削除し、

model.pyの記述を以下のように変更しました。

class snack(SQLObject):
name = UnicodeCol()
eval = IntCol()
comment = UnicodeCol()

そして再びtg-admin sql createを実行すればOKです。

前回テーブルの構造を確認するのに、わざわざsqlite3コマンドを使っていたのですが、tg-adminコマンドに同様の機能(tg-admin sql sql)がありました。便利ですね~。

tg-admin sql sql
Using database URI sqlobject.dburi="sqlite:///C:/Documents and Settings/nyusuke/My Documents/Turbogears/JUNKSNACK/devdata.sqlite"
CREATE TABLE snack (
    id INTEGER PRIMARY KEY,
    name TEXT,
    eval INT,
    comment TEXT
);

さて、テーブルは生成できましたがまだ中身がありませんので、いくつかレコードを追加してみようと思います。sqlite3の方から追加してもいいんだとは思いますが、ここではCatWalkという、Turbogearsツールボックスに組み込まれている機能を使ってみたいと思います。

tg-admin toolboxコマンドでツールボックスを立ち上げたら、ブラウザから「localhost:8080」にアクセスします。右上にCatWalkへのリンクがありますのでクリックしましょう。

*CatWalkにアクセスする方法はもう一つあります。model.pyにマウントするやり方ですが、詳しくはこちらを参考にどうぞ。


味気ない画面ですが、左側にsnackテーブルが見えます(複数テーブルがある場合はここにずらっと並びます)。

CatWalkの最初の画面


これをクリックするとテーブルのサマリを見ることができます。

テーブルのサマリ


よく見てみるとカラムの並び順が期待したとおりにはなっていません。Comment, Name, Evalという順番になってしまっています(上記画面ではEvalカラムが切れてしまって見えていませんが、実際にはNameカラムの右側に表示されています)。まずはこのカラムの順番をName, Eval, Commentという順番に変更してみます。

カラムの順番を変更するには、Manage Cokumnsというリンクをクリックします(上記画像のテーブルアイコンの部分をクリックします)。

すると以下のような編集画面に行くことができます。

カラム構造をいじる


ここで各カラムのチェックの左側にマウスをホバーさせれば、ドラッグして順番を移動させることができます。順番を移動できたら「Save」ボタンを押します。

カラムをドラッグ



順番が入れ替わりました(・∀・)

順番が入れ替わった


それではいくつかレコードを追加してみたいと思います。「Add snack +」という青色のボタンをクリックするとレコード追加画面に行くことができます。

入力は直感的にわかると思います。invalidな値を入力しようとすると、「Save」ボタンが押せなかったりします。例えばnameカラムをStringColとして生成した場合は日本語でレコードを追加しようと思っても「Save」ボタンを押すことができません。また例えばevalカラムはIntColとして生成されていますので、全角の数字や、文字を入力しようと思ってもダメです。

データの入力


「Save」ボタンを押せばレコードが追加されます。

データのサマリ


テーブルのサマリを見てみましょう。

確かに追加されてますね!レコード上にマウスを持っていけば編集や削除のアイコンが表示されます。カッコイイなぁ。

レコードが追加された

CatWalkを満喫したところで今日は終了。おやすみなさ~い(・∀・)ノ

Category(s)
Turbogears Turbogears
The URL to Trackback this entry is:
http://nagosui.org:8080/Nagosui/COREBlog2/manage-database-with-catwalk/tbping