Lectura de datos en bruto (sin procesar) desde POST

Introducción

A veces, el cliente envía una gran cantidad de datos por el método POST. En Web.py, se puede manejar de esta manera.

Código

class RequestHandler():
    def POST():
        data = web.data() # you can get data use this method

web.data() retorna una Query String, por ejemplo con un formato como: usuario=Jolth&documento=1892234&email=&pais=169&provincia=17. Adiferencia de web.input() que retorna un objeto Storage, con un formato como: <Storage {‘pais’: u’169′, ‘documento’: u’1892234′, ‘provincia’: u’27’, ‘email’: u”, ‘usuario’: u’Jolth’}>.

Anuncios

Servir XML

Problema

¿Cómo servir ficheros XML correctamente?

Esto es necesario cuando usted tiene una aplicación de terceros que para enviar los datos de su servicio esperán algún tipo de respuesta XML.

Solución

Cree su plantilla XML con el archivo XML que desee servir (i.e response.xml). Si el XML tiene alguna variable, use la correspondiente plantilla Web.py. Esto es sólo un ejemplo:

$ vim templates/response.xml
  1 $def with (code)
  2 <?xml version="1.0"?>
  3 <RequestNotification-Response>
  4 <Status>$code</Status>
  5 </RequestNotification-Response>
  6

Sigue leyendo

Usando subaplicaciones

Problema

Cómo puedo incluir una aplicación definida en otro fichero en su aplicación?

Solución

Supongamos que se tiene una aplicación blog.py:

  1 # -*- coding: utf-8 -*-
  2 import web
  3 
  4 urls = (
  5   "", "reblog",
  6   "/(.*)", "blog"
  7 )
  8 
  9 class reblog:
 10     def GET(self): raise web.seeother('/')
 11 
 12 class blog:
 13     def GET(self, path):
 14         return "Blog " + path
 15 
 16 app_blog = web.application(urls, locals())

Sigue leyendo

web.seeother y web.redirect

Problema.

Después de procesar entradas de los usuarios (digamos desde un formulario), usted desea redireccionar a otra página?

Solución.

class SomePage:
    def POST(self):
        # Do some application logic here, and then:
        raise web.seeother('/someotherpage')

Cuando un mensaje es enviado a esta función y una vez concluida, se enviará al navegador un código HTTP 303 [1], y la nueva ubicación. El navegador realizará un GET a la localización definida en argumento de web.seeother.

Nota: web.seeother y web.redirect se hacen excepciones en web.py 0.3. Sigue leyendo

Funciones en python

Las funciones en Python como en otros lenguajes, son muy útiles para separar bloques de código que necesitamos en distintos lugares de un programa. Las funciones en Python se diferencian de las funciones en C/C++ en que éstas siempre devuelven un valor (por tanto no hay cabida a la definición de procedimientos). Si una función en Python no retorna un valor con la palabra reservada return, ésta devolverá “None”.

Definición de una Función:

Para definir una función en Python se usa la palabra reservada “def” seguida del nombre de la función y entre paréntesis los parámetros separados por comas. Dentro de nuestra definición de función debe ir el bloque de código que ejecutará nuestra función.

>>> 
>>> def m(a, b):
... print a
... print b
... 
>>>

Sigue leyendo

Cadenas de Formato en Python

Cadenas de Formato Normal:

Este tipo de formato proporciona una manera sencilla de insertar valores en una cadena. Los valores se listan en una tupla y se insertan por orden en la cadena en el lugar de un marcador de formato:

>>> 
>>> print "%s, %s, %s" % (1,2,4)
1, 2, 4
>>>

Aunque es bastante eficiente, este estilo no siempre es fácil de leer, especialmente cuando se insertan múltiples valores. Hay una forma alternativa de dar formato a cadenas que usa diccionarios en lugar de tuplas. Sigue leyendo