KayっていうGoogle App Engine に載せるフレームワークの勉強してきた
2009/11/14に行われた、Python Hack-a-thon #2
に参加して、Kayフレームワークの勉強をしてきました。
講師は、開発者の松尾さんです。
Python Hack-a-thon #2
http://atnd.org/events/1288
オラクル青山センター 2009/11/14 10:00-19:00
Kayの基本
Kay = ケィ
http://code.google.com/p/kay-framework/
Kayで作られたアプリケーション
theokayblog(ブログ)
http://code.google.com/p/theokayblog/
心を引いたKayの特徴
デバッグ機能。
- エラーの位置が詳細に表示される
- エラー画面からコンソールを叩ける
Pythonのアプリだと、この機能がついているものは多いけれど、Kayのは少し高機能で実行結果で画面がリアルタイムに書き換わる。
データのインポート機能、エクスポート機能がある
データのダンプとリストアができる。
別のappspotのデータも移行できる。ある時点のデータも残せる。
ローカルとappspot.comとで、管理系データ共通にしづらいとか、ローカルでテストしづらいとか、よくあるので、この機能は非常にありがたい。
自前でアップロード機能作ってたぐらい、必要としている機能です。
Kayの始め方
ここから下は、メモ。よほど困っていない限り、ここを読まずに、チュートリアルを読んだ方がよい。
環境は、Mac OSX Snow Leopardです。
Google App Engineのインストール
アプリケーションを落としてきて、インストールする。
http://code.google.com/appengine/downloads.html
IPythonのインストール
easy_installでインストールする。実は入れなくても動作する。
easy_install ipython
/usr/local/src/kayにkayのソースを落とす。
実際には他の場所でも良い。
cd /usr/local/src hg clone https://kay-framework.googlecode.com/hg/ kay
プロジェクトを作成
kayappsという名前でプロジェクトを作ることにします。
「manage.py」というシンボリックリンクができるから、
今後manage.pyを実行する時は、絶対パスではなく、そのシンボリックリンクを叩きます。
cd /path/to/workdir python2.5 /usr/local/src/kay/manage.py startproject kayapps
Google App Engineで、アプリケーションの名前を予約
名前はプロジェクト名。誰かと被ると作れない。早いもの勝ち。
手順的に先にやるべきかも。
https://appengine.google.com/start/createapp
アプリケーション作成
appsという名前でアプリケーションを作ることにします。
cd /path/to/workdir/kayapps
python2.5 manage.py startapp apps
アプリケーションを登録
settings.pyを編集して、アプリケーションをマッピング
# settings.py INSTALLED_APPS = ( ) APP_MOUNT_POINTS = { }
次のように編集。
作ったアプリケーションをルートにマッピングすることにします。
↓
# settings.py INSTALLED_APPS = ( 'apps', ) APP_MOUNT_POINTS = { 'apps': '/', }
GAEにアップロード
python2.5 /usr/local/src/kay/manage.py appcfg update
動作の確認は(この場合)、 http://kayapps.appspot.com/
テンプレートのコンパイル
テンプレートがpythonコードにコンバートされているのを確認。
# コンパイル前のテンプレート apps/templates # コンパイル後のテンプレート apps/templates_compiled
ソースコード一部抜粋。
# apps/templates_compiled/index.html def root(context, environment=environment): l_message = context.resolve('message') if 0: yield None yield u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n<title>Top Page - apps</title>\n</head>\n<body>\n%s\n</body>\n</html>' % ( escape(l_message), )
確かに、pythonのコードに変換されている。
モデルの作成
モデルの作り方は通常の方法と変わらないですね。
# apps/models.py class Comment(db.Model): user = db.ReferenceProperty() body = db.TextProperty(required=True) created = db.DateTimeProperty(auto_now_add=True)
コマンドラインからのデータの登録
まず、インタラクティブシェルを動かして、
# 通常、こちら。 python2.5 ./manage.py shell # ipython使わない場合 python2.5 ./manage.py shell --no-use-ipython
データを登録。
# > Running on Kay-0.4.0 # > Interactive Kay Shell cl = Comment(body='hello , guest book') # > cl.put() datastore_types.Key.from_path(u'apps_comment', 1, _app_id_namespace=u'kayapps') cl.body # > u'hello , guest book'
最後はControl-D で抜ける。
この機能は良いなぁ、と思っていたら、
Google App EngineのDevelopment Console
http://localhost:8080/_ah/admin/interactive
でも、同じように登録できることに気がついた。
from model.message import Message m = Message( user_name='user', message_subject='message', message_body='message body' ) m.put()
開発中は助かる。便利だなー、これ。
残
残りは宿題。