2013年3月2日土曜日

GAE/P + Django1.4 で、セッションを使う

GAE(Google App Engine)/P + Django1.4 で、セッションを使う方法です。
バックエンドに、キャッシュを使ってます。

プロジェクトの雛形は、こちらを参考にしましたが、Django1.4 では、CACHE_BACKEND = 'memcached:///' は使えません..

1.ディレクトリー構成

Django1.4標準のディレクトリ構成とは若干異なりますが、あまり気にしなくても良いかと。

/app
 app.yaml
 main.py
 favicon.ico
 /project
  __init.py__
  settings.py
  urls.py
  views.py
  /templates
   index.html

2.app.yaml

Python2.7 + Django1.4 を使います。

-- app.yaml --
application: <アプリケーション名>
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: django
 version: "1.4"

3.main.py

sysモジュール'memcache'を、google.appengine.api.memcacheにエイリアスしています。

-- main.py --
import os, sys
import django.core.handlers.wsgi
from google.appengine.api import memcache

sys.modules['memcache'] = memcache
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
app = django.core.handlers.wsgi.WSGIHandler()

4.settings.py

MIDDLEWARE_CLASSES に、SessionMiddleware を追加。
SESSION_ENGINE には、キャッシュを使います。
CACHES の BACKEND に、memcached を使います。

-- settings.py --
import os

DEBUG = True

TIME_ZONE = 'Asia/Tokyo'
USE_TZ = False

LANGUAGE_CODE = 'ja-jp'

MIDDLEWARE_CLASSES = (
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
)

INSTALLED_APPS = (
 'django.contrib.humanize',
 'project'
)

ROOT_URLCONF = 'project.urls'

ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
 ROOT_PATH + '/templates',
)

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
 }
}

5.views.py

セッションデータの書き込み
request.session['<キー名>'] = '<データ>'

セッションデータの読み出し
xxx = request.session['<キー名>']

6.参考

セッションの使い方
http://docs.djangoproject.jp/ja/latest/topics/http/sessions.html
キャッシュフレームワーク
http://docs.djangoproject.jp/ja/latest/topics/cache.html#topics-cache

0 件のコメント:

コメントを投稿