app-engine-patchでgoogle-app-engine-django-openidを使う

他のところで一度書いたネタなのですが、こっちにも書いておきます。
GAE+Djangoの組み合わせでOpenIDを使ってみようというエントリです。

google-app-engine-django-openid

DjangoOpenIDを使うときはdjango-openidというそのままのライブラリがあるので、これをpython-openidと組み合わせて使うのですが、django-openidRDBに設定やらを書き込むのでGAEのdatastoreでは使えません。(たぶん)
そこで使うのが、google-app-engine-django-openidというこれまたそのままのライブラリです。


プロジェクトのサイトは以下ですが、使うにはソースコードSVNからチェックアウトする必要があります。
http://code.google.com/p/google-app-engine-django-openid/
のSourceをクリックして、

svn checkout http://google-app-engine-django-openid.googlecode.com/svn/trunk/ google-app-engine-django-openid-read-only


なお説明書きを見ると、新しくプロジェクトを作るにはGAE-Helperを使ってね!と書いてあります。が、試してみたところapp-engine-patchでも使えました。

  • プロジェクトのルートにopenidディレクトリとopenidgaeディレクトリをコピー
  • INSTALLED_APPSにopenidgaeを追加
  • プロジェクトのルートにあるurls.pyに適当なURLを追加してopenidgaeのurls.pyをインクルード


これでmanage.py runserverすればlocalhost:8000/openid/loginなどとしてログイン画面が出てくるはずです。なんかかっこいいIDセレクタまでついています。
ログインしている状態で、

import openidgae
user = openidgae.get_current_person(request, response)

のようにすればユーザ(Person)オブジェクトが取得できます。自分でメソッドを追加したければopenidgae/views.pyを編集すればよいです。

バグ

そんな感じで試してたら先日書いたバグ(というほどでもない)を見つけました。
POSTで受けとるはずのところでGETを参照しているので、ログイン後のリダイレクト先が常にルートになってしまうため修正。


http://d.hatena.ne.jp/juno_c/20090521/1242890299

サンプル

そんなわけでDjango Hack-a-thonの復習もかねて、はてなIDでログインできるイベント管理アプリを作ったので公開します。


イベント日程調整ツール
http://chkfj-gae.appspot.com/event/