Las variables contextuales y de ambiente – web.ctx

Problema

Usted desea utilizar las variables contextuales en el código tales como la página de referencia o el navegador del cliente.

Solución

Usar web.ctx hace esto posible. web.ctx se basa en la clase threadeddict a.k.a (también conocido como) ThreadedDict. Esta clase crea un objeto de tipo diccionario que tiene atributos específicos para el id del hilo en proceso. Esto es bueno porque nos permite usar un objeto de tipo diccionario cuando muchos usuarios están accediendo al sistema de forma simultánea y el objeto sólo tendrá los datos de la petición HTTP dada (No se comparten los datos ya que el objeto es thread-safe).

web.ctx tiene variables para cada petición(request) que contienen información específica de cada solicitud, como la variable de entorno del cliente. Suponiendo que se desea determinar cuál es la página desde donde un usuario accede:

class example:
    def GET(self):
        referer = web.ctx.env.get('HTTP_REFERER', 'http://google.com')
        raise web.seeother(referer)

Este código utiliza web.ctx.env para acceder a la variable de entorno HTTP_REFERER. Si no hay uno, el valor predeterminado es google.com. Por último, se redirige al usuario a la página de procedencia.

web.ctx también es útil porque se puede establecer mediante un loadhook. Los datos de sesión, por ejemplo, se establece cada vez que se maneja una petición y los datos se almacenan en web.ctx. Dado que web.ctx es thread-safe, puede utilizar los datos de la sesión, como si se tratara de un objeto normal de Python.

N. del T.: HTTP_REFERER es útil para crear botones de “Atras” o para crear estadísticas de visitas.

Los datos encontrados en web.ctx

Request

environ a.k.a. env – a dictionary containing the standard “WSGI environment variables
home – the base path for the application, including any parts “consumed” by outer applications http://example.org/admin
homedomain – ? (appears to be protocol + host) http://example.org
homepath – The part of the path requested by the user which was trimmed off the current app. That is homepath + path = the path actually requested in HTTP by the user. E.g. /admin This seems to be derived during startup from the environment variable REAL_SCRIPT_NAME. It affects what web.url() will prepend to supplied urls. This in turn affects where web.seeother() will go, which might interact badly with your url rewriting scheme (e.g. mod_rewrite)
host – the hostname (domain) and (if not default) the port requested by the user. E.g. example.org, example.org:8080
ip – the IP address of the user. E.g. xxx.xxx.xxx.xxx
method – the HTTP method used. E.g. GET
path – the path requested by the user, relative to the current application. If you are using subapplications, any part of the url matched by the outer application will be trimmed off. E.g. you have a main app in code.py, and a subapplication called admin.py. In code.py, you point /admin to admin.app. In admin.py, you point /stories to a class called stories. Within stories, web.ctx.path will be /stories, not /admin/stories. E.g. /articles/845
protocol – the protocol used. E.g. https
query – an empty string if there are no query arguments otherwise a ? followed by the query string. E.g. ?fourlegs=good&twolegs=bad
fullpath a.k.a. path + query – the path requested including query arguments but not including homepath. E.g. /articles/845?fourlegs=good&twolegs=bad

Response

status – the HTTP status code (default ‘200 OK’) 401 Unauthorized
headers – a list of 2-tuples containing HTTP headers
output – a string containing the response entity

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