GAE で ジャンゴジャンゴジャンゴ アプリケーションを作るとこまで
GAE上で、Django の welcome ページまではなんとか動かすことができたので、次は単純なアプリケーションを作る。
1. アプリケーションの骨格を作成
Eclipse上のソースフォルダをコマンドプロンプトで開き、python manage.py startapp を実行する。
geatest というアプリケーション名にする。
C:\Program Files\eclipse3.4R2
そうすると、アプリケーションの骨格が生成され、以下のような構成になる。
gaetest フォルダ(パッケージ)が作成され、models.py や views.py ファイルが生成される。
2. モデルの作成
モデルクラスを作成する。
Django 標準のモデルクラスは機能しないので、GAE Django ヘルパーが提供するモデルクラスと、GAEのデータストアプロパティを使用する。
Django 標準のモデルクラスは機能しないが、Django モデルと同様に取り扱うことができ、モデルはDjangoに登録される。
from appengine_django.models import BaseModel from google.appengine.ext import db # Create your models here. class GaeTest(BaseModel): message = db.StringListProperty() create_date = db.DateTimeProperty('data created')
2.1 モデルの有効化
GAE で Django を使用する場合、RDBMS を使えないので、モデルに対応するテーブル等は作る必要がない。
setting.py のINSTALLED_APPS に記述するだけで、有効となる。
INSTALLED_APPS = ( 'appengine_django', 'gaetest', # この行を追加 )
3. ビュー、テンプレートの作成
3.1 URLマッピングの作成
初期表示で、保存されたモデルの内容を表示し、追加ボタンでデータを追加するアプリケーションを想定。
タプルの1つ目にURLのパターン、2つ目にリクエストURLがパターンに一致する場合に処理するハンドラ(ビュー)を記述する。
urlpatterns = patterns('', (r'^gaetest/$', 'gaetest.views.index'), # 初期表示 (r'^gaetest/add/$', 'gaetest.views.add'), # データ追加 )
3.2 ビューの作成
上記 urls.py にて、リクエストURLのパターンによって、処理をハンドリングする
リクエストを処理して、レスポンスを返す。このとき、データを取得し、コンテキストに埋め込み(以下の例では、render_to_response に隠蔽されているが)、テンプレートでそれを取り出して描画させる。
from django.shortcuts import render_to_response from gaetest.models import GaeTest import datetime def index(request): g_list = GaeTest.gql('order by message') return render_to_response('gaetest/index.html', {'g_list':g_list}) def add(request): msg = request.POST['message'] g = GaeTest(message=msg, create_date=datetime.datetime.now()) g.save() g_list = GaeTest.gql('order by message') return render_to_response('gaetest/index.html', {'g_list':g_list})
3.3 テンプレートの作成
上記ビューで、コンテキストに埋め込まれたオブジェクトを利用して、画面描画を行う。
<form method="post" action="/gaetest/add/"> message:<input name="message" /> <input value="add" type="submit" /> </form> {% if g_list %} <ul> {% for g in g_list %} <li>{{ g.message }} {% endfor %} </li></ul> {% else %} <p>No GaeTest are available.</p> {% endif %}
3.4 ここまでのファイル構成
ここまでの作業で、以下のようなファイル構成になる
4.実行
よっしゃうごいた。
5. その他
5.1 管理ツール
Django の管理ツールは、RDBMS と密接に関連しており、RDBMS を持たないGAEでは、提供されない。
別途、/_ah/admin で管理インターフェースが提供される。
5.2 対話シェル
対話シェルにて、モデルなどのAPIを利用可能。
python manage.py shell コマンドを使用する。
C:\Program Files\eclipse3.4R2\workspace\typea-services\src>python manage.py shell : Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from gaetest.models import GaeTest >>> import datetime >>> g = GaeTest(message='first gae model.',create_date=datetime.datetime.now()) >>> g.save() datastore_types.Key.from_path(u'GaeTest', 1, _app_id_namespace=u'typea-services' )
いじょ。