Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Si queremos que los usuarios puedan publicar sus propios saludos, necesitamos un método para procesar la información enviada por el usuario con un formulario web. El framework webapp facilita el procesamiento de los datos del formulario.
Sustituye el contenido de helloworld/helloworld.py por el siguiente:
import cgi
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write("""
<html>
<body>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>""")
class Guestbook(webapp.RequestHandler):
def post(self):
self.response.out.write('<html><body>You wrote:<pre>')
self.response.out.write(cgi.escape(self.request.get('content')))
self.response.out.write('</pre></body></html>')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
Vuelve a cargar la página para ver el formulario y, a continuación, intenta enviar un mensaje.
Esta versión dispone de dos controladores: MainPage, asignado a la URL /, muestra un formulario web; Guestbook, asignado a la URL /sign, muestra los datos enviados por el formulario web.
El controlador Guestbook incluye un método post() en lugar de un método get(). Esto se debe a que el formulario que muestra MainPage utiliza el método POST HTTP (method="post") para enviar los datos del formulario. Si, por algún motivo, necesitas un único controlador para procesar las acciones GET y POST a la misma URL, puedes definir un método para cada acción en la misma clase.
El código del método post() obtiene los datos del formulario de self.request. Antes de volver a mostrárselos al usuario, utiliza cgi.escape() para aplicar el formato de escape de caracteres especiales HTML a sus equivalentes de entidad de caracteres. cgi es un módulo de la biblioteca estándar Python; para obtener más información, consulta la documentación de cgi.
Nota: el entorno de App Engine incluye la biblioteca estándar Python 2.5 completa. Sin embargo, no se permiten todas las acciones. Las aplicaciones App Engine se ejecutan en un entorno restringido que permite a App Engine ampliarlas con seguridad. Por ejemplo, no se permiten las llamadas de nivel inferior al sistema operativo, las operaciones de conexión de redes y algunas operaciones de sistema de archivos, y se generará un error si intentas realizarlas. Para obtener más información, consulta El entorno de tiempo de ejecución Python.
Ahora que podemos recopilar información del usuario, necesitamos un lugar para insertarla y un método para recuperarla.
Para continuar, consulta la sección Uso del almacén de datos.