设置GAE名称空间

时间:2013-04-08 20:44:51

标签: python google-app-engine namespaces

此功能在交互式控制台上正常工作:

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)时,检索并存储在数据存储区中的所有数据都属于root(空)命名空间。

提出问题的

  1. 我设置的命名空间错了吗?
  2. 我每次在检索和存储数据之前都必须设置它(在留言板示例中不是这种情况)
  3. 如果在服务器端设置了namespece,它如何知道哪个post / get()属于哪个命名空间?
  4. 请不要指向我这个链接:https://developers.google.com/appengine/docs/python/multitenancy/multitenancy文档非常......

    修改 这回答了问题

      

    “set_namespace(namespace)设置当前HTTP的名称空间   请求“。

    我认为“为什么留言簿示例不同”的答案在appengine_config.py

    现在唯一的问题是 - 当登录用户时,他必须能够读取根命名空间,所以我必须将用户数据存储在根命名空间中,但是一旦他登录并且他的命名空间设置为特定的,我的cookie检查功能无法访问root命名空间并导致错误。

    我如何解决这个问题? (感觉就像和自己说话)

1 个答案:

答案 0 :(得分:1)

您需要在处理函数中设置命名空间,因为如果您在导入下设置命名空间,则会缓存部分代码并且不会为每个请求重新执行。如果您将其设置在代码的非动态部分中,则相同。

所以我认为发生的是第一次加载代码时没有用户,命名空间也不会改变。当然它可以在交互式控制台中工作,因为代码的整个部分都得到了解释。

# this will be the namespace of the user when the code loads or nothing
# and it will never change as long as the instance is up
namespace_manager.set_namespace(user.namespace)  

class YourHandler(webapp2.RequestHandler):
    def get(self):
       # get the user....
       namespace_manager.set_namespace(user.namespace)
       # setting the namespace here will change it for each request.