app-engine-patchを使ってみる

Django on Google App Engineでちょこちょこ開発しているけども、やっぱりDjangoなのにあのきれいなadmin画面が使えないのではDjango人生の80%くらいを損していると思うのでid:voluntasにすすめられたapp-engine-patchを使ってみる。

http://code.google.com/p/app-engine-patch/

バージョン1.0がリリースされて2週間くらい経ったし。安定版と見なしていいだろう〜と。まずはGettingStartedを読む。なるほど。

 INSTALLED_APPS = (
 ...
-    'myapp',
     'registration',
     'mediautils',
 )

chmod +x manage.pyして./manage.py runserverで開発用サーバを起動した。http://localhost:8000/にアクセスする。


ぎゃー、「Caught an exception while rendering: unknown encoding: X-MAC-JAPANESE」だー。


ふう、落ち着け。ようするにsettings.pyの冒頭でX-MAC-JAPANESEをutf-8にマップしてしまえばいいんだろう。

def register_x_max_ja():
    "workaround of 'Caught an exception while rendering: unknown encoding: X-MAC-JAPANESE'"
    import codecs
    from encodings.utf_8 import getregentry
    codecs.register(lambda name: getregentry() if name == 'x-mac-japanese' else None)

register_x_max_ja()

さて、リロードっと。む、エラーメッセージが変わった。「Caught an exception while rendering: Reverse for 'settings.myapp.views.list_people' with arguments '()' and keyword arguments '{}' not found.」なんだこれ、Reverse?
テンプレートのここでエラーになっている

<a href="{% url myapp.views.list_people %}">Generic views sample</a> |

urlタグってなんだ?id:voluntasいわくこれはURLマッパーの情報を利用して/some/url/prefix/of/func1/and/{{ arg1 }}/{{ arg2 }} とか書くかわりに {% url func1 arg1 arg2 %} と書けるようにする機能だそうな。ふむ。myappを消したから見つからないって怒られているだけか。いったん戻そう。


動いた!

ああ、generate admin userなんてのがある。そりゃこのまま公開したらいけないよね。adminアカウントを作ってadmin画面にアクセスしてみる。

ばっちり動いていますね。いちおう日本語を入れても大丈夫かテスト。日本語で表示されてるんだから大丈夫だとは思うけどね。

うん。全く危なげなく動いている。簡単だ。ドキュメントを読むところから始めて1時間でできた。とりあえず今日はGoogleにアップロードするところまでやるか。


追記:

  • startappでアプリケーションfoobarを作る
  • myapp/urlauto.pyを見てまねをする
  • foobar/url.pyを書く
  • foobar/template/index.htmlをつくる
  • foobar/views.pyを書く
  • foobar/models.pyを書く
  • /adminを見てみたけど、さっき作ったモデルが管理画面に出てこないぞ?
  • myapp/admin.pyを見てまねをする
  • 管理画面に出た!
  • アプリを作る
  • manage.py update
  • できた。

もう朝の6時で丁寧に解説を書く気が起きません。