Django on Google App Engine in 13 simple steps + django1.1対応

シェアする

ちょっと webapp 以外も触ってみたいなーと思ってとりあえず django を動かしてみた。
参考にしたサイトの情報は多少古い(Django0.96時代のもの)なので日本語訳にするついでに新しいバージョン(Django1.1)に対応してみた。といっても基本はあまり変わらないんですけど。

元エントリは Django on Google App Engine in 13 simple steps : Thomas Brox Røst です。英語むずかしい。

また、django1.1 対応するにあたり Google AppEngine で Django 1.1 を使う | METAREAL を参考にしました。ありがとうございます。

Step 1: SDKをインストールして、アプリケーションの名前を登録します。
SDKをインストール後、django1.1をインストールします。SDK自体にはdjango0.96しか入っていないので手動でインストールする必要があります。また、Google App Engine のサーバにはすでにインストールされているので、ユーザがdjangoをアップロードする必要はありません。

Step 2: ディレクトリを作成します。このチュートリアルでは djangotest という名前にします。

tmp$ mkdir djangotest
tmp$ cd djangotest

Step 3: main.py を新しく作成したディレクトリ内に作ります。

# main.py
 
import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangotest.settings'
sys.path.append('/home/brox/tmp/djangotest')

from google.appengine.dist import use_library
use_library('django', '1.1')
 
# Google App Engine imports.
from google.appengine.ext.webapp import util
 
# Force Django to reload its settings.
from django.conf import settings
settings._target = None
 
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch
 
sig = django.dispatch.Signal()

# Log errors.
#sig.connect(log_exception, django.core.signals.got_request_exception)
 
# Unregister the rollback event handler.
sig.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)
 
def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()
 
    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)
 
if __name__ == '__main__':
    main()

これはローカルでテストする為にパスを追加した部分を除いて、ここにあるファイルとほぼ同じです。
そして DJANGO_SETTINGS_MODULE を追加しましたが App Enginne で動かす分にはきっと必要ないでしょう。
動かないエラーログを無効にする必要がありました。(よくわかりません><)

Step 4: app.yaml を同じディレクトリに追加します。内容は以下の通り。

application: djangotest
version: 1
runtime: python
api_version: 1
 
handlers:
- url: /.*
  script: main.py

アプリケーション名を確認しましょう。

Step 5: djangotest ディレクトリから、新しい Django プロジェクトを作成します。

tmp/djangotest$ django-admin.py startproject djangotest

(Django は正しくインストールされているものとします)

Step 6: 作成したアプリケーションを確認します。

tmp/djangotest$ cd ..
tmp$ dev_appserver.py djangotest
INFO     2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
INFO     2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
INFO     2008-04-08 19:08:10,404 dev_appserver_main.py] Running application mash
name on port 8080: http://localhost:8080

ブラウザで http://127.0.0.1:8080/ にアクセスし、 It worked! のメッセージがでる事を確認します。
django test

Step 7: 新しい django アプリをこのプロジェクト内に作成します。

tmp$ cd djangotest
tmp/djangotest$ python djangotest/manage.py startapp main

Step 8: まずmodelを追加します。今から作る物は訪問者のIPアドレスおよびアクセス時間ログを取り、出力するだけの簡単なアプリケーションです。

# models.py
 
from google.appengine.ext import db
 
class Visitor(db.Model):
    ip = db.StringProperty()
    added_on = db.DateTimeProperty(auto_now_add=True)

標準のDjangoモデルを使用する必要はありません。

Step 9: view を作ります。データをVisitorモデルに追加し、以前の訪問者を表示します。models.py と同じディレクトリにある views.py を編集します。

# views.py
 
from django.http import HttpResponse
 
from djangotest.main.models import Visitor
 
def main(request):
    visitor = Visitor()
    visitor.ip = request.META['REMOTE_ADDR']
    visitor.put()
 
    result = ''
    visitors = Visitor.all()
    visitors.order('-added_on')
 
    for visitor in visitors.fetch(limit=40):
        result += visitor.ip + u' visited on ' + unicode(visitor.added_on) + u''
 
    return HttpResponse(result)

Step 10: 最後に、urls.py を編集します。

# urls.py
 
from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^$', 'djangotest.main.views.main'),
)

Step 11: Step6と同様にアプリケーションをテストします。上手く動けば、リロードする都度新しいVisitorの情報が追加され、それらを表示します。
django test 2

Step 12: アプリケーションを Google App Engine へアップロードします。

tmp$ appcfg.py update djangotest

最初のアップロード時にグーグルアカウントのメールアドレスとパスワードを求められるでしょう。

Step 13: http://djangotest.appspot.com にアクセスして動いているか確認します。

Sponsored Link

シェアする

フォローする