Kay-frameworkのテンプレートの読み込み問題

Kayでのテンプレート継承 – Blog@uchikoshi22」より。

「kay/templates/」に同名のファイルがあると「myapp/templates/」よりも優先して読み込まれてしまう問題。

たとえば次のテンプレートでは「myapp/templates/base.html」ではなく「kay/templates/base.html」が読み込まれてしまう。

myapp/templates/index.html

{% extends "base.html" %}
{% block hoge %} EXTENDED? {% endblock %}

この問題はなかなか気がつかないだろう。

回避策だが、「Kayでのテンプレート継承 – Blog@uchikoshi22」にあるようにsettings.pyのTEMPLATE_DIRSで指定する。

TEMPLATE_DIRS = (
  'myapp/templates',
)

あるいは、テンプレートの方で「myapp/base.html」と指定しても良さそうだ。

myapp/templates/index.html

{% extends "myapp/base.html" %}
{% block hoge %} EXTENDED? {% endblock %}

ドキュメントの「7.4. テンプレートの読み込み」では「なお APP_DIR/templates ディレクトリは自動的に読み込みの対象になります。」とあるので、てっきり「myapp/templates/」が優先的に読み込まれると思っていたけれど、そうではないらしい。

最新のKay-fwのソースコードを追いかけていないので、何とも言えないが、自分もはまりそうで気になる。

ぜひともMLに投げていただきたいと思う。

App Engine 1.4.1リリース。高い可用性を持つ新しいデータストア「High Replication Datastore」が登場。

Google App Engine SDK 1.4.1がリリースされた。

1.4.1では、高い可用性を持つ新しいデータストア「High Replication Datastore」が使用できるようになった。

High Replication Datastoreの公式ドキュメント(英語)。

既存のアプリケーションでHigh Replication Datastoreを使うには、移行作業が必要。

料金体系も変わるらしい。

Google App Engineでエンティティをデータストアから削除する方法

モデルインスタンスのdelete()メソッドを使うと、対応するエンティティをデータストアから削除できます。

from google.appengine.ext import db
entity = db.get(key) #モデルインスタンスを取得
entity.delete() #モデルインスタンスを削除

まとめて削除するときはdb.delete()を使用します。
db.delete()は引数に、モデルインスタンスやキー、モデルインスタンスやキーのリスト(またはiterable)を受け取ります。
モデルインスタンスのdelete()メソッドを1件ずつ使うよりも高速です。

from google.appengine.ext import db
q = MyModel.all(keys_only=True) #keys_onlty=trueをつけるとちょっと早い
results = q.fetch(10)
db.delete(results)

Google App Engine用フレームワークKayでパフォーマンス測定ツール「Appstats」を使用する

Google App Engineに用意されているパフォーマンス測定ツール「Appstats」をKayで使用する方法を紹介します。

app.yamlとsettings.pyを編集し、「Appstats」を有効にします。

app.yaml

handlers:
…
# 追加。普段のハンドラの上に書くこと
- url: /stats.*
  script: $PYTHON_LIB/google/appengine/ext/appstats/ui.py

- url: /.*
  script: kay/main.py

settings.py

MIDDLEWARE_CLASSES = (
  'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware', #追加
  'kay.auth.middleware.AuthenticationMiddleware', #追加
  …
)

以上の設定で使用できるようになりました。簡単でしたね。

開発環境で動作を確認するには「http://localhost:8080/stats」にアクセスします。

もう少し、使いやすくしましょう。

Administration Console Custom Pagesの機能を使い、Adminコンソールに追加します。

app.yaml

# 追加
admin_console:
  pages:
  - url: /stats
    name: "Stats"

参考にしたページ