Skip to content

Instantly share code, notes, and snippets.

@snaka
Created May 3, 2012 13:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snaka/2585719 to your computer and use it in GitHub Desktop.
Save snaka/2585719 to your computer and use it in GitHub Desktop.
webapp2_extras の sessions を使う
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
<html>
<body>
goto: <a href='/page2'>page 2</a>
</body>
</html>
#!/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)
<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