2015-08-26 7 views
0

У меня есть приложение, которое основано на школе. Каждый арендатор - это другая школа, и для доступа к приложению все пользователи для каждой школы имеют одинаковый пароль.Использование сеанса webapp2 как имя пространства имен. Как?

Наряду с этим каждый школьный пользователь должен иметь электронную почту google, если они хотят получить доступ к приложению. Поэтому приложение сначала проверяет, является ли он пользователем Google, проверяет, является ли он школьным пользователем, и, наконец, проверяет, что их электронная почта google находится в списке школьных пользователей, прежде чем им разрешен доступ к любой странице.

Часть школы пользователя использует данные сеанса из webapp2 сеансов, чтобы обеспечить каждый запрос они имеют соответствующего доступ

class Handler(webapp2.RequestHandler): 
def dispatch(self): 
    # Get a session store for this request. 
    self.session_store = sessions.get_store(request=self.request) 

    try: 
     # Dispatch the request. 
     webapp2.RequestHandler.dispatch(self) 
    finally: 
     # Save all sessions. 
     self.session_store.save_sessions(self.response) 

@webapp2.cached_property 
def session(self): 
    # Returns a session using the default cookie key. 
    return self.session_store.get_session() 

Когда пользователь логины проверить пароль, то создать сеанс, который проверяет их комбинацию пароля/пользователя всего запрос.

def check_u(self): 
    try: 
     uid = self.session.get('user') 
     parent = self.session.get('school-id') 
     udl = m.models.User.by_id(int(uid),parent) 
     if uid and udl: 
      return udl 
     else: 
      return False 
    except (TypeError,AttributeError): 
     return False 

Родитель хранилищу объект для каждой отдельной школы используется называется MetaSchool, который я в настоящее время использую, чтобы гарантировать, что нет утечки данных через школу. Каждая запись хранилища данных использует этот родительский ключ сеанса как способ установки записи хранилища данных с помощью MetaSchool в качестве родителя, а затем снова использовать этот ключ сеанса для считывания этих данных.

Этот метод работает, но является обременительным. Я хотел бы использовать пространство имен как способ разделения данных, но хотел бы использовать идентификатор Metaschool как имя.

def namespace_manager_default_namespace_for_request(): 
    ### Here I need to get ------ parent = self.session.get('school-id') 
    ### use this session to gain the MetaSchool key id 
    ### Set this as the namespace name 

В основном пытаются подражать из документации по указанному ниже СЦЕНАРИЙ

from google.appengine.api import users 

def namespace_manager_default_namespace_for_request(): 
    # assumes the user is logged in. 
    return users.get_current_user().user_id() 

У меня возникли трудности с получением сеанса данные из объекта Handler ??? Любые мысли

ответ

0

Это то, что я придумал.

from google.appengine.api import namespace_manager 
from webapp2_extras import sessions 

def namespace_manager_default_namespace_for_request(): 
    session = sessions.get_store() 
    s = session.get_session() 
    name = s.get('key') 
    if name: 
     return name 
    else: 
     return namespace_manager.set_namespace('string') 
+0

, если это работает правильно для вас, пожалуйста, примите это уверенность в ответ за нормальный StackOverflow этикета, благодаря –

+0

Да просто сделал, но пришлось ждать несколько дней – Jesse