Uso de la sesión con recargador

Problema

Hay algunos problemas en el uso de sesiones cuando se ejecuta la aplicación en modo de depuración. ¿Hay alguna solución alternativa?

Solución

Web.py ejecuta el programa en modo de depuración(debug)[1] cuando se ejecuta usando el servidor web incorporado. Simple solución a esto es desactivar el modo de depuración, que se puede hacer estableciendo “web.config.debug = False“.

import web
web.config.debug = False

# resto de su código

Si desea utilizar sesiones en modo de depuración, entonces he aquí una solución temporal.

Ya que el modo de depuración permite recarga el módulo, el recargador carga el módulo principal dos veces (una vez como principal y una vez con su nombre) y 2 objetos de sesión se crearán. Esto puede evitarse mediante el almacenamiento de la sesión en algún lugar global para evitar la creación del segundo objeto.

Aquí hay un código de ejemplo que guarda la sesión en web.config.

  1 # -*- coding: utf-8 -*-
  2 import web
  3 
  4 urls = ("/", "hola")
  5 
  6 app = web.application(urls, globals())
  7 
  8 if web.config.get('_sesion') is None:
  9     session = web.session.Session(app, web.session.DiskStore('sesiones'), {'count': 0})
 10     web.config._sesion = session
 11 else:
 12     session = web.config._sesion
 13 
 14 class hola:
 15    def GET(self):
 16        print 'La Sesión:', session
 17        session.count += 1
 18        return 'Hola, %s!' % session.count
 19 
 20 if __name__ == "__main__":
 21    app.run()

Para producción nustro ejemplo tendría el siguiente aspecto:

  1 # -*- coding: utf-8 -*-
  2 import web
  3 web.config.debug = False
  4 
  5 urls = ("/", "hola")
  6 
  7 app = web.application(urls, globals())
  8 
  9 session = web.session.Session(app, web.session.DiskStore('sesiones'), {'count': 0})
 10 
 11 class hola:
 12    def GET(self):
 13        print 'La Sesión:', session
 14        session.count += 1 
 15        return 'Hola, %s!' % session.count
 16 
 17 if __name__ == "__main__":
 18    app.run()

[1]:  Qué ocurre cuando esta debug en True.

>>> web.config.debug
True
>>> print web.config['__doc__']

A configuration object for various aspects of web.py.

`debug`
   : when True, enables reloading, disabled template caching and sets internalerror to debugerror.

>>>
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s