Эта функция отлично работает на интерактивной консоли:настройка GAE имен
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 задано на стороне сервера, как он знает, какой пост/get() принадлежит в какое пространство имен?
Пожалуйста, не указывают мне на эту ссылку: https://developers.google.com/appengine/docs/python/multitenancy/multitenancy документация очень ...
EDIT это отвечает на вопрос
«set_namespace (пространства имен) Устанавливает пространство имен для текущий HTTP запрос. "
И я догадываюсь, что ответ на вопрос «почему был гостевой пример другого» находится в appengine_config.py
.
Теперь единственный вопрос - при регистрации пользователя он должен иметь возможность читать корневое пространство имен, поэтому я должен хранить данные пользователя в корневом пространстве имен, но как только он войдет в систему и его пространство имен настроено на что-то конкретное, моя функция проверки файлов cookie не может получить доступ к корневому пространству имен и вызывает ошибку.
Как мне обойти это? (чувствую, что разговариваю сам с собой)
Да, это имеет смысл. Я также обнаружил, что если у вас есть модуль 'appengine_cinfig.py',' namespace_manager_default_namespace_for_request() 'вызывается каждый раз, когда вы делаете запросы (или даже запрос хранилища данных, потому что у меня был один запрос, но эта функция получила 4 раза) и что строка, которую возвращает, устанавливается как пространство имен. Это кажется еще более элегантным решением. Я преодолел проблему проверки файлов cookie с помощью 'namespace_manager.set_namespace (" ") user = Users.get_by_id (user_id) namespace_manager.set_namespace (user.namespace)' –