Google App Engine で Django を使う
参考サイト
- Getting Started With Django | Python | Google Cloud
- http://michilu.com/django/doc-ja/tutorial01/
- http://www.everes.net/2008/apr/09/django-on-google-app-engine/
- http://blog.broxrost.com/index.php/2008/04/08/django-on-google-app-engine/
まずディレクトリ作成
~/letter/gae $ mkdir djangosite
プロジェクト作成
Google App Engine は Django 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 は最後にもコンマを付けたまましておくのが流儀なのか。