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' )
いじょ。
