この関数はインタラクティブ コンソールで正常に動作します。
from google.appengine.api import namespace_manager
from google.appengine.ext import db
namespace_manager.set_namespace("some_namespace")
class Class(db.Model):
c = db.StringProperty()
x = Class(c="text")
x.put()
ただし、ログインが実行namespace_manager.set_namespace(user.namespace)
されると、データストアに取得および保存されたすべてのデータはルート (空の) 名前空間に属します。
それは疑問を投げかけます
- 名前空間の設定が間違っていますか?
- データを取得して保存する直前に毎回設定する必要がありますか (ゲストブックの例ではそうではありません)
- namespece がサーバー側で設定されている場合、どの post/get() がどの名前空間に属しているかをどのように知ることができますか?
このリンクを教えないでください: https://developers.google.com/appengine/docs/python/multitenancy/multitenancyドキュメントは非常に...
編集 これは質問に答えます
"set_namespace(namespace) 現在の HTTP リクエストの名前空間を設定します。"
そして、「なぜゲストブックの例が違うのか」に対する答えはappengine_config.py
.
唯一の質問は、ユーザーにログインするときにルート名前空間を読み取れる必要があるため、ユーザーデータをルート名前空間に保存する必要があるように見えますが、ログインして名前空間が特定のものに設定されると、Cookie チェック機能が機能します。ルート名前空間にアクセスできず、エラーが発生します。
どうすればそれを回避できますか?(独り言みたいな感じ)