GAE で Python 2.7 + Django 1.3 を使う

Google App Engine で開発。第五弾。

Python 2.7 が使えるということなので使ってみます。ついでに、Django 1.3 も使ってみます。

GAE Launcher をインストールすると下記に Django 1.3 が置かれています。

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_1_3

django/bin/django-admin.py を使えばプロジェクトの作成ができます。ひとまず、django-admin.py に実行権限を付与して使っていますが、もっと良い設定の仕方があるように思います。

$ chmod +x django-admin.py


django-admin.py を実行する際に django.core を求められるので、先に示したパスを PYTHONPATH に追加して実行しています。これももっと良い設定の仕方があるように思いますが、他のことをやりたいので調査は保留です。

ひとまず、django-admin.py は実行できました。

次に PyDev での設定です。

プロジェクトの External Libralies に ${GOOGLE_APP_ENGINE}/lib/django_1_3 が設定されていることを確認します。また、Interpreter に 2.7 を使うようにします。

次はプロジェクトのコードを作成します。

app.yaml は下記のようになります。

application: clock
version: 1
runtime: python27
api_version: 1
threadsafe: false

libraries:
- name: django
  version: "1.3"

handlers:
- url: /.*
  script: main.py


threadsafe を true にした場合は、script は main.py ではなく、main.app になります。threadsafe を true にして、Django と併せて使用しようとしたところ main モジュールに app がないよ、とエラーになってしまったので、ひとまず false にして他を確認することにします。

settings.py は下記を変更します。

ROOT_URLCONF = 'urls'


main.py は下記のようにします。

from google.appengine.dist import use_library
use_library('django', '1.3')
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
from google.appengine.ext.webapp import util

def main():
    application = django.core.handlers.wsgi.WSGIHandler()
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()


ひとまず、これで動きました。(manage.py を使わず dev_appserver.py でサーバを動かしています。)