from GAE to pure Django
Google App Engineの上で動くように作った最中限オンラインをとりあえずGoogle App Engineに依存しないように書き換える。まぁDjangoで作ってあるのでそんなに難しくない。
「from google.appengine.ext import db」を「from django.db import models」に書き換える。「db.」を「models.」に置換する。Expandoがないと言われるのでModelに変える。
モデルフィールドリファレンス — Django v1.0 documentation
StringPropertyはTextField, BooleanPropertyはBooleanField, DateTimePropertyはDateTimeField、BlobPropertyは中に細々したものをつっこんでいたのだけど将来的になくす予定だったりするのでどうするか悩んだけどTextFieldにした。やる気が持続している間にとりあえず動くって所まで持っていきたい。ReferencePropertyはForeignKey。ReferencePropertyのcollection_nameオプションはrelated_name。IntegerPropertyはIntegerField。
お、とりあえずサーバが走るところまで来た。ページを表示しようとするとunknown encoding: X-MAC-JAPANESEとおこられる。ぐぐるかす。
「LookupError: unknown encoding: X-MAC-JAPANESEの罠 」の件 - Djangoへの片思い日記
ふむふむ、MACOSXがSJISを独自拡張していてそのコーデックをPythonが用意していないということか。って言ったらid:Volunasに「MacPortsで入るPythonが対応していないだけで本家では修正済」と教わる。そうか…面倒だからDEFAULT_ENCODINGを書き換える選択肢でいいや。
Could not import saichugen.main.views. Error was: No module named google.appengine.ext.webappと言われる。
from google.appengine.ext.webapp import template from google.appengine.api import users
この辺りを削る必要がある。さてさて、GAEを離れるとなると今のGoogleアカウントを使った認証はできなくなるんだよなぁ。そこをどうするか追々考える必要がある。今回はとりあえず手元でGAEなしで動くようにしたいだけなので放置。追記: OpenID for Google Apps - Account Authentication API - Google Code。とりあえずOpenID認証を実装すればGmailのアカウントで認証したときにはメアドがわかるからそれがいまGAEの方でユーザ識別に使っているメアドと一致するなら同一ユーザとしてデータを引き継ぐってことでいいか。
えっと、.all()は.objects.all()に置換だな、でも.all().filterは.objects.filterでいいのか。あ、filterの構文も変わっている。GAEのはfilter("play_count >", 0)だけどDjangoはfilter(play_count__gt=0)だな
「'QuerySet' object has no attribute 'order'」、これはorder_byに置換すればOK。「You haven't set the DATABASE_ENGINE setting yet.」、あーそういえばまだだった。SQLiteでいいや。
putではなくsave。とりあえずトップ画面までは出た。
書き忘れ:templateの置き場所