tipfy - Hello, World! チュートリアル

まずはチュートリアルということで、おなじみ Hello, World! に挑戦。Hello, World! Tutorial を見ながらやってみます。

ひな形プロジェクト展開

いきなり Hello, World! Tutorial をやろうとしたのですが、まずはフレームワークをインストールしなくてはなりません。tipfy の場合はパッケージをダウンロードすると、中にアプリケーションのひな形となるディレクトリがあるので、このディレクトリ内のファイルを自分のアプリにコピーして使います。

ということで、まずは以下のページから tipfy の配布ファイルをダウンロードします。

Downloads - tipfy - Project Hosting on Google Code

ダウンロードしたファイルを展開すると、

$ ls -F tipfy
AUTHORS.txt     README.txt      manage/         source/
LICENSE.txt     docs/           setup.py        tests/

この source ディレクトリの中に、tipfy アプリのひな形がこんな感じで入ってます。

$ ls -F tipfy/source
app.yaml        lib/            static/         tipfy/
config.py       main.py         templates/      urls.py

おなじみの app.yaml があります。ファイル名やディレクトリ名でだいたい中身の検討がついちゃいますね。

まずは、まっさらなところから Hello, World! アプリを作りたいと思うので source ディレクトリを丸ごとコピーして準備します。

$ cp -pr tipfy/source helloworld

これで helloworld ディレクトリにアプリのひな形が用意できました。

$ cd helloworld

Hello, World! チュートリアル

まずは、リクエストハンドラを作ります。

hello.py ファイルを新しく作成

   1 from tipfy import RequestHandler, response
   2 
   3 class HelloWorldHandler(RequestHandler):
   4     def get(self, **kwargs):
   5         response.data = 'Hello, World!'
   6         return response

見ての通りなんですが、クラスの get メソッドが HTTP GET を処理して post メソッドがあれば HTTP POST を処理するということだそうです。それぞれ tipfy.response を返すようにします。

RequestHandler とか request, response については後ほどゆっくり見てみることにしましょう。

次に、URL のパスと上記リクエストハンドラを結びつけるための Rule を書きます。

urls.py 既存ファイルに Rule を追加

   1 # -*- coding: utf-8 -*-
   2 """
   3     urls
   4     ~~~~
   5 
   6     URL definitions.
   7 
   8     :copyright: 2009 by tipfy.org.
   9     :license: BSD, see LICENSE.txt for more details.
  10 """
  11 from tipfy import get_config, import_string, Rule
  12 
  13 def get_rules():
  14     rules = [
  15         ### ↓↓↓ 追加します ↓↓↓
  16         Rule('/', endpoint='home', handler='hello:HelloWorldHandler'),
  17     ]
  18 
  19     for app_module in get_config('tipfy', 'apps_installed'):
  20         try:
  21             # Load the urls module from the app and extend our rules.
  22             app_urls = import_string('%s.urls' % app_module)
  23             rules.extend(app_urls.get_rules())
  24         except ImportError:
  25             pass
  26 
  27     return rules

まずはここまで。Rule の引数についても後ほど詳しく見ることにしときます。

とりあえずはこの状態でアプリを実行してブラウザでアクセスすると「Hello, World!」が表示されます。

$ dev_appserver.py .

Hello, World チュートリアルをテンプレート対応

上記チュートリアルではレスポンスを RequestHandler に直接書いていたので、これをテンプレートで出力するようにしてみます。

tipfy は標準で Jinja2 と Mako というテンプレートに対応しています。ここでは Jinja2 を使ってみます。

templates/hello.html ファイルを新しく作成

{{message}}

これが Jinja2 のテンプレートになります。

hello.py を修正します

   1 from tipfy import RequestHandler
   2 from tipfy.ext.jinja2 import render_response
   3 
   4 class HelloWorldHandler(RequestHandler):
   5     def get(self, **kwargs):
   6         context = {'message': 'Hello, World!'}
   7         return render_response('hello.html', **context)

見ての通りで render_response が Jinja2 テンプレートをレンダリングして返すというわけです。

テンプレートに Mako を使いたい場合は tipfy.ext.jinja2 のところを tipfy.ext.mako にすればいいそうです。

Hello, World! チュートリアルを JSON 対応

レスポンスを JSON にしたい場合は、

hello.py を修正します

   1 from tipfy import RequestHandler, render_json_response
   2 
   3 class HelloWorldHandler(RequestHandler):
   4     def get(self, **kwargs):
   5         context = {'message': 'Hello, World!'}
   6         return render_json_response(context)

すると application/json レスポンスを返します。

Hello, World! チュートリアルを AJAX 対応

みたいなことが元のチュートリアルに書いてあるんですが、どういうことかと言うと、ひとつの RequestHandler で、AJAX リクエストには JSON でレスポンスして、普通のリクエストにはテンプレートをレンダリングして返すことが簡単にできるということで、

hello.py を修正します

   1 from tipfy import RequestHandler, request, render_json_response
   2 from tipfy.ext.jinja2 import render_response
   3 
   4 class HelloWorldHandler(RequestHandler):
   5     def get(self, **kwargs):
   6         context = {'message': 'Hello, World!'}
   7         if request.is_xhr:
   8             return render_json_response(context)
   9         else:
  10             return render_response('hello.html', **context)

ということで request.is_xhr で判断してレスポンスを変えたり出来ると言うことですね。


tipfy - small Python framework for App Engine


CategoryTipfy

ボンノウドットコム Wiki: tipfy - Hello, World! チュートリアル (last edited 2010-03-17 13:45:43 by JunKikuchi)

このサイトに関するお問い合わせは kikuchi@bonnou.com までお願いします