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