Google App Engine で Django を使う

参考サイト

まずディレクトリ作成

~/letter/gae $ mkdir djangosite

プロジェクト作成

Google App EngineDjango 0.96.1 を含んでいる。
Google App Engine に含まれる django-admin.py でプロジェクトを作ってみよう。
Python のサーチパスは sys.path に設定されている。
環境変数 PYTHONPATH で指定することができる。
ということで

PYTHONPATH=/home/ancient/local/opt/google_appengine/lib/django python2.5 ~/local/opt/google_appengine/lib/django/django/bin/django-admin.py startproject djangosite

こんなふうに実行してみたが、IOError: [Errno 13] Permission denied: '/home/ancient/letter/gae/djangosite/djangosite/settings.py' なんてエラーがでるので断念。

Debian のパッケージで Django をインストールしてプロジェクトを作成。あっさりできた。

~/letter/gae/djangosite $ django-admin startproject djangosite

Google App Engine の app.yaml と main.py

~/letter/gae/djangosite に Getting Started With Django  |  Python  |  Google Cloud にあるとおり main.py を作成。os.environ の ところに = 'settings' を追加し、それを読み込むために sys.path に1つ追加。ついでに先頭に # -*- coding: utf-8; -*- を追加。

# Google のサンプルだと値をセットしていない。
# " = 'settings.py'" を追加。
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

# sys.path に上記ファイル settings.py がないと言われたので追加。
sys.path.append(os.path.join(os.path.dirname(__file__), 'djangosite'))

settings.py は Getting Started With Django  |  Python  |  Google Cloud のとおりに修正 + import os を ROOT_PATH = os.path.dirname(__file__) の前にいれる。

アプリケーションを作って URL 登録

~/letter/gae/djangosite/djangosite $ python2.5 manage.py startapp app1

~/letter/gae/djangosite/djangosite/urls.py の編集

from django.conf.urls.defaults import *

urlpatterns = patterns('',
                       (r'^$', 'app1.views.main'),
)

この時点で python2.5 ~/local/opt/google_appengine/dev_appserver.py ~/letter/gae/djangosite/ って動かすと views が空なのでエラーになるが Django のしくみにのっかて動いているっぽい。

とりあえずの view の実装

せっかくなのでテンプレートを使ってみる。先頭に # -*- coding: utf-8 -*- が必要。
~/letter/gae/djangosite/djangosite/app1/views.py

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response

def main(request):
    return render_to_response('app1.html', {'val1':'まみむめも'})

~/letter/gae/djangosite/djangosite/templates/app1.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>app1 view</title>
  </head>
  <body>
    <h1>app1 view</h1>
    {{val1}}
  </body>
</html>

動かしてみる

~/letter/gae $ python2.5 ~/local/opt/google_appengine/dev_appserver.py ~/letter/gae/djangosite/

http://localhost:8080/ にアクセス。表示された。

今日はここまで

なんとか Google App Engine 上で Django が動いた模様。
Google データストアと Django の関連とかいろいろあるだろうけど。。。
まずは Django が全然わかってないし。
これからだね。

雑感

Python は最後にもコンマを付けたまましておくのが流儀なのか。