Python

GAE/Pを使ったアプリをローカライズする方法

Djangoをローカライズと同じようにできるので、以前書いたメモ「メモ: Djangoのローカライズ」の通りにできます。

なお、そのメモには、「settings.py」に「gettext_noop = lambda s: s」を追加する記述が漏れていたので注意が必要です。

以下、簡単に列挙します。

read more »

Python

GAE/PのEntityで多対多の関係を持たせる方法

Google App EngineのEntityに、多対多の関係を持たせる場合、以下の2つの方法を用いることで実現できます。

  1. 片方のEntityにListPropertyを定義
  2. 新しいEntityを定義して、それに両方のEntityのReferencePropertyを定義

1番目の注意点は、ListPropertyのサイズを大きくしないことです。

もし、ListPropertyのサイズが大きくなる可能性がある場合、2番目の方法を取る方が望ましいみたいです。

また、それぞれの関係に対して、何か情報を持たせたい場合もまた、2番目の方法をとることになります。

ただし、2番目の方法ではデータストアのアクセスが増えるため、本当に必要な場合のみ採用するべきとのことです。

参考)エンティティの関係のモデル化

Python

GAE/PのEntity GroupsとReferencePropertyの使い分け

GAE/PのEntity GroupsとReferencePropertyは、共にEntityに対して1:nの関係を持たせることができます。

この二つの使い分けの目安は、

  • 同一トランザクションで処理させる必要があるならばEntity Groups
  • 同一トランザクションで処理させる必要がないのならばReferenceProperty

とするみたいです。

参考)キーとエンティティグループ

Python

Djangoのカスタムフィルタを作成する方法

Djangoのカスタムフィルタは以下のように作成することができます。

read more »

Python

Facebookのpython-sdkで日本語を扱う場合の注意点

facebookのpython-sdkでにおいて、日本語をそのまま使うと例外が発生しました。そのため、同ライブラリで日本語を扱う場合、事前にutf-8などでエンコードしておく必要があります。または、ライブラリを拡張するのもいいと思います。

message = ‘メッセージ'
graph = facebook.GraphAPI(self.current_user.access_token)
self.graph.put_wall_post(message.encode('utf-8'))

理由)

facebookのpython-sdkを使ってGraphAPIにアクセスする場合、facebook-sdkは「GraphAPI」クラスの「request」メソッドを呼びます。

このメソッドで「urllib.urlencode(meg)」を実行しており、このmsgが日本語だとUnicodeEncodeErrorが発生するためです。