Created
May 3, 2012 13:40
-
-
Save snaka/2585719 to your computer and use it in GitHub Desktop.
webapp2_extras の sessions を使う
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
application: session | |
version: 1 | |
runtime: python27 | |
api_version: 1 | |
threadsafe: yes | |
handlers: | |
- url: /favicon\.ico | |
static_files: favicon.ico | |
upload: favicon\.ico | |
- url: .* | |
script: main.app | |
libraries: | |
- name: webapp2 | |
version: "2.5.1" | |
- name: jinja2 | |
version: latest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<body> | |
goto: <a href='/page2'>page 2</a> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# encoding: utf-8 | |
import os | |
import webapp2 | |
from webapp2_extras import sessions | |
from jinja2 import Environment, FileSystemLoader | |
env = Environment( | |
loader = FileSystemLoader(os.path.dirname(__file__)) | |
) | |
# | |
# ハンドラで手軽にセッションを利用するための基底クラスを定義する | |
# | |
class SessionEnabledHandler(webapp2.RequestHandler): | |
def dispatch(self): | |
# セッションストアを取得 | |
self.session_store = sessions.get_store(request=self.request) | |
try: | |
# ハンドラの処理 | |
webapp2.RequestHandler.dispatch(self) | |
finally: | |
# セッションストアにセッションの内容を保存 | |
self.session_store.save_sessions(self.response) | |
# このでコレータ使うと2回目以降のアクセスはキャッシュされたオブジェクトを | |
# 返してくれる。 | |
@webapp2.cached_property | |
def session(self): | |
return self.session_store.get_session(backend='memcache') | |
# メインページのハンドラ | |
class MainHandler(SessionEnabledHandler): | |
def get(self): | |
template = env.get_template('main.html') | |
# ここでセッションにメッセージを格納 | |
self.session['message'] = u'メッセージ' | |
return self.response.write(template.render()) | |
# 2ページ目のハンドラ | |
class SecondHandler(SessionEnabledHandler): | |
def get(self): | |
template = env.get_template('page2.html') | |
# セッションからメッセージを取り出してテンプレート描画 | |
return self.response.write(template.render( | |
message=self.session['message'] | |
)) | |
# webapp2_extras.sessions 使うために必須の設定 | |
config = {} | |
config['webapp2_extras.sessions'] = { | |
'secret_key' : 'my-secret-key' | |
} | |
app = webapp2.WSGIApplication([('/', MainHandler), | |
('/page2', SecondHandler)], | |
config=config, | |
debug=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<body> | |
<p>page2</p> | |
<p>message: {{ message }}</p> | |
<p>goto: <a href='/'>main</a></p> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment