イントロダクション
gaeo.controller.BaseControllerはリクエスト処理に使用されます。つまり、HTTPリクエストを処理したい場合、gaeo.controller.BaseControllerを拡張したコントローラーを作成する必要があります。その後、作成したコントローラに適切なメソッド(action)にリクエストをディスパッチさせます。
例えば、デフォルトルートパス("/") ハンドラはwelcomeコントローラとindexアクションであるので、"/"のリクエストに以下のコントローラを記述します。
# application/controller/welcome.py from gaeo.controller import BaseController class WelcomeController(BaseController):
def index(self):
self.render(text='hello, world')
注意 以下の記述は バージョン: 0.2.1 に基づいています。
クラスリファレンス ブラウザのクッキーを保持するディクショナリです。 'foo' をクッキーに保持する場合、以下のようにするとデータが保持できます。
self.cookies['foo'] = 'blah...'
これは request.cookies のエイリアスです。
テンプレートが与えられているか、または render メソッドが呼び出されているかどうかを返す ブール型の値です。
全リクエストパラメータを保持するディクショナリです。例えば、以下のURLをリクエストした場合、
welcome コントローラの index アクションで、パラメータは以下のようになります。 'controller': 'welcome', 'action': 'index', 'a': '123', 'b': 'abc'
}
self.params['a'] とすると、 '123' が得られます。
google.appengine.ext.webapp.RequestHandler.request のエイリアスです。
google.appengine.ext.webapp.RequestHandler.response のエイリアスです。
-
sessionGAEOはセッションを実装しています。このディクショナリはセッションデータを保持します。クッキーオブジェクトと殆ど同じですが、セッションデータをきちんと保持するには、put メソッドを呼び出さなければなりません。
self.session['foo'] = 123
self.session.put()
params['controller'] のエイリアスです。
params['action'] のエイリアスです。
クライアントが携帯電話かどうか(iPodではなくiPhoneかどうか)を返すブール型オブジェクトです。
クライアントが iPod または iPhone かどうかを返すブール型オブジェクトです。
クライアントが Android 端末かどうかを返すブール値です。
post 処理をここに配置してください。このメソッドは基本的に空で、ユーザのコントローラクラスにオーバーライドされます。このメソッドは実際のアクションが呼び出された後、ディスパッチャによって呼び出されます。
aftetr_action と同じですが、処理の前に使用されます。
一度、未知のURLがリクエストされると、ディスパッチャがこのメソッドを呼び出します。
-
redirect(self, url, perm = False)
google.appengine.ext.webapp.RequestHandler.redirect のエイリアスです。 ただし、has_rendered には True がセットされます。
-
render(self, *html, **opt)
コントローラのメイン出力メソッドです。このメソッドを呼び出さなかった場合、ディスパッチャは render から初期テンプレートを呼び出します。render メソッドは色々なタイプの出力をサポートしており、(たまに忘れてしまう) Content_Type ヘッダの設定をすることなく出力できます。
このメソッドには型指定なしと型指定ありの2つの使用法があります。型指定なしの場合、クライアントに直接HTML文書を表示できます。
例えば、以下のようになります。
self.render('<p>hello, world</p>');
'<p>hello, world</p>' という文字列は 'text/html' のコンテンツタイプでクライアントに送信されます。
また、型とオプションを指定できます。
self.render(text='This is a plan text')
テキストは 'text/plan' でクライアントに送られます。
self.render(html='<h1>Hello</h1>')
HTML文字列は 'text/html' でクライアントに送られます。
result = self.to_json({'a': 123, 'b': 'abc'})
self.render(json=result)
'application/json' でJSON文字列を出力します。
self.render(xml='<el>An Elemnt</el>')
'text/xml' でXML文字列を返します。
self.render(template='edit')
レンダリング用のテンプレートファイルを指定します。アクションが「index」の場合、ディスパッチャはレンダリング用の「index.html」をsがします。このメソッドを使用すると、他のテンプレートファイルが指定できます。
self.render(template_string='Hello, {{ nick }}', values = {'nick': 'alice'})
1行でテンプレートと値を出力できます。
imgdata = .... # AppEngine の ImageAPI で処理したもの)
self.render(image=imgdata)
'image/<image_type>' でバイナリイメージを出力します。
注意: 全てのコンテンツタイプは「charset=utf-8」に設定されます。
-
to_json(self, obj, **kwds)
これは simplejson のJSONエンコーダへのショートカットです。このメソッドにディクショナリを渡すと、JSON文字列が返ります。
obj = {'x': 123, 'b': 'abc'}
self.to_json(obj) # 戻り値は「 "{'x': 123, 'b': 'abc'} 」
|
|