Django Coverageがなかなかよろしい。
2011年12月3日土曜日
GAE1.6+Python2.7+DjangoでSessionを使う
Googleが公開しているDjangoの使い方は随分と古いが、Sessionをsettingsから外すように書かれている。これだとrequest.sessionが使えないのでappengine_djangoなどのツールを使ってSessionMiddlewareを差し込むわけだが、ただそれだけのためにごちゃごちゃと3rd partyのライブラリを入れるのは悔しいので、最低限度の方法を試してみた。
appengine_djangoには、Session保存のバックエンドとしてmemcacheを使うモジュールが公開されているのでこれを使うことにした。このスレッドの#2からリンクされているcache_backend.pyをプロジェクトの適当な場所(自分はlib配下)に保存し、settings.pyに以下を追加。
これでめでたくDjangoのviewでrequest.sessionを使えるようになる。
appengine_djangoには、Session保存のバックエンドとしてmemcacheを使うモジュールが公開されているのでこれを使うことにした。このスレッドの#2からリンクされているcache_backend.pyをプロジェクトの適当な場所(自分はlib配下)に保存し、settings.pyに以下を追加。
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', ) # http://code.google.com/p/google-app-engine-django/issues/detail?id=57 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHE_BACKEND = 'lib.cache_backend://'
これでめでたくDjangoのviewでrequest.sessionを使えるようになる。
2011年12月2日金曜日
GAE 1.6+Django 1.2
Google App Engine 1.6.0から公式にPython 2.7+Django 1.2がサポートされたということなんだけど、ぐぐってみても従前からのappengine-djangoを使う方法ばかりでてきてよくわからん。
ということで色々試してみた。以下、わかったこと:
1. Djangoをzipする必要なし
ただしdjango-admin.pyとかmanage.pyとかで楽チンすることはできなくなる。まあ、そんなに面倒な事もないでしょ。GAEのコンソールも使えるし。
2. ローカルにDjangoをインストールする必要もなし
google_appengineディレクトリ配下に必要なDjangoのライブラリは入っている。
3. Virtualenvの元でも動く
先日書いたとおり。
で、django-admin.py使わないということはディレクトリ配置やsettings.pyとかurls.pyとかを自前で打ち込むということなわけで、大した話ではない。まずディレクトリ配置はこんな感じ。
app.yaml
librariesというエントリでDjango 1.2を使うことを宣言。
main.py
settings.pyの所在を定義。
project/settings.py
必要なライブラリとアプリケーション所在場所、urls.pyの場所を定義。テンプレートを使う場合はその所在場所を定義。
project/urls.py
URL定義は通常のDjangoアプリと同じ。
project/poll/views.py
テスト用簡単なview
ということで色々試してみた。以下、わかったこと:
1. Djangoをzipする必要なし
ただしdjango-admin.pyとかmanage.pyとかで楽チンすることはできなくなる。まあ、そんなに面倒な事もないでしょ。GAEのコンソールも使えるし。
2. ローカルにDjangoをインストールする必要もなし
google_appengineディレクトリ配下に必要なDjangoのライブラリは入っている。
3. Virtualenvの元でも動く
先日書いたとおり。
で、django-admin.py使わないということはディレクトリ配置やsettings.pyとかurls.pyとかを自前で打ち込むということなわけで、大した話ではない。まずディレクトリ配置はこんな感じ。
. ├── app.yaml ├── main.py ├── project │ ├── __init__.py │ ├── poll │ │ ├── __init__.py │ │ ├── views.py │ ├── settings.py │ ├── templates │ │ └── __init__.py │ ├── urls.py
app.yaml
librariesというエントリでDjango 1.2を使うことを宣言。
application: helloworld version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: main.app libraries: - name: django version: "1.2"
main.py
settings.pyの所在を定義。
import os os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' import django.core.handlers.wsgi app = django.core.handlers.wsgi.WSGIHandler()
project/settings.py
必要なライブラリとアプリケーション所在場所、urls.pyの場所を定義。テンプレートを使う場合はその所在場所を定義。
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', ) INSTALLED_APPS = ( 'project.poll' ) ROOT_URLCONF = 'project.urls' import os ROOT_PATH = os.path.dirname(__file__) TEMPLATE_DIRS = ( ROOT_PATH + '/templates', )
project/urls.py
URL定義は通常のDjangoアプリと同じ。
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'project.poll.views.index'), )
project/poll/views.py
テスト用簡単なview
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'project.poll.views.index'), ) (GAE)masayang@ubuntu-vm:~/Documents/GAE/dempa$ cat project/poll/views.py from django.http import HttpResponse def index(request): return HttpResponse("Hello")
登録:
投稿 (Atom)