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
├── 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")


0 件のコメント:

コメントを投稿