開発したアプリなど一覧

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

コメント

タイトルとURLをコピーしました