Webapp2 Sesiones en el motor de aplicaciones de Google

Acabo de descubrir cómo implementar las sesiones de webapp2 en mi proyecto de motor de aplicación de Google usando python. El código está abajo. Lo que me gustaría saber es cuál es el mejor enfoque para hacerlo. Lo que he hecho es crear un archivo de Python y soltar el código de BaseHandler en él, simplemente lo importo, pero tengo que duplicar constantemente la clave de configuración en cada aplicación / archivo de Python.

El código para el BaseHandler que obtuve del sitio web:

class BaseHandler(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() 

Para establecer variables en una sesión, simplemente importe el BaseHandler en la aplicación y llamo a lo siguiente como en los ejemplos:

 self.session['name'] = name 

Obtener variables es como en el ejemplo:

 name = self.session.get('name') 

La parte que tengo que copiar en cada archivo es la siguiente:

  config = {} config['webapp2_extras.sessions'] = {'secret_key': 'some-secret-key-to-use',} app = webapp2.WSGIApplication([('/hello.*', MainHandler), ], config=config, debug=True) 

¿Es esta la mejor manera de hacerlo o hay mejores enfoques? Gracias

La forma en que manejé las sesiones fue crear una clase BaseHandler derivada de webapp2.RequestHandler. Equipé a la clase BaseHandler con todos los valores de inicio de sesión y valores de sesión predeterminados y reutilizé esta clase para crear cada controlador en lugar de derivar directamente de webapp2.RequestHandler.

La ventaja obvia de esto es que no tiene que repetir la inicialización de la sesión cada vez que tiene que usar una sesión en un archivo.

 class BaseHandler(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. sess = self.session_store.get_session() #add some default values: if not sess.get('theme'): sess['theme']='cosmo'#'slate' return sess class MainPage(BaseHandler): def get(self): template = JINJA_ENVIRONMENT.get_template('stereo.html') if self.request.get('theme'): theme=self.request.get('theme') self.session['theme']=theme else: theme=self.session['theme'] 

Consulte mi artículo para más detalles.