python gae django

Download Python Gae django

If you can't read please download the document

Upload: manuel-perez

Post on 16-Apr-2017

66 views

Category:

Software


0 download

TRANSCRIPT

GAE - DJANGO

Manuel [email protected]

Septiembre de 2011

Cloud Computing

La computacin en la nube (Cloud computing) es un paradigma que permite ofrecer servicios de computacin a travs de Internet.

Autor: Oliver Widder www.geekandpoke.com

Licencia Creative Commons

Cloud Computing (I)

Capas de la nube:IaaS (infrastructure as a service):Infraestructura de computacin y almacenamiento.

Orientado al desarrollador.

PaaS (Platform as a service):Entorno de desarrollo y ejecucin de la aplicacin.

Orientado al desarrollador.

SaaS (Software as a service):Aplicaciones en entorno web.

Orientado al cliente final.

Algunos proveedores PaaS

GAE: Por qu?

Comienzo fcil

Escalabilidad automtica

Fiabilidad, rendimiento y seguridad de la infraestructura de Google

Alojamiento gratuito hasta cierto nivel

GAE: Comienzo fcil

App Engine es una completa pila de desarrollo que emplea tecnologas habituales para crear y alojar aplicaciones web.

En App Engine, puedes crear el cdigo de tu aplicacin, probar la aplicacin en tu equipo local y subirla a Google nicamente haciendo clic en un botn o introduciendo una secuencia en la lnea de comandos.

GAE: Fcil creacin y despliegue

Se puede hacer desde eclipse o tambin desde lnea de comandos.

GAE: Muchas libreras

GAE: Escalabilidad automtica

Por primera vez, tus aplicaciones pueden aprovechar las mismas tecnologas escalables sobre las que estn creadas las aplicaciones de Google como, por ejemplo, BigTable y GFS.

App Engine dispone de una funcin de escalabilidad automtica, as que lo nico que tienes que hacer es crear el cdigo de tu aplicacin y nosotros nos encargamos del resto.

App Engine puede satisfacer tus necesidades independientemente del nmero de usuarios de que dispongas y de la cantidad de datos que almacene tu aplicacin.

GAE: Fiabilidad, rendimiento,...

La infraestructura de Google es famosa por su gran fiabilidad y por su alto rendimiento.

Con App Engine, puedes aprovechar los diez aos de experiencia que posee Google en la ejecucin de sistemas escalables de forma masiva y concebidos para el rendimiento.

A todas las aplicaciones de App Engine les aplican las mismas polticas de seguridad, privacidad y proteccin de datos que a las dems aplicaciones de Google.

GAE: Alojamiento gratuito

Crear una aplicacin en App Engine no slo resulta fcil. Adems es gratis!

Puedes crear una cuenta y publicar una aplicacin que la gente podr utilizar inmediatamente sin ningn coste ni obligacin.

Una aplicacin de una cuenta gratuita dispone de hasta 500 MB de espacio y admite hasta cinco millones de vistas mensuales.

Cuando ests listo para ms, puedes habilitar la facturacin, configurar un presupuesto diario mximo y asignarle el presupuesto a cada recurso en funcin de tus necesidades.

GAE: Limites y cuotas (I)

GAE: Limites y cuotas (II)

GAE: Limites y cuotas (III)

GAE: Limites y cuotas (IV)

Si se supera el limite de las cuotas devuelve un error.Las cuotas se renuevan cada dia.Se pueden ampliar las cuotas pagando. Solo se pagar cuando se superen los limites gratuitos.

GAE-Python

Permite provechar la gran cantidad de bibliotecas, de herramientas y de frameworks para Python que utilizan los desarrolladores profesionales para crear aplicaciones web internacionales.

Las aplicaciones web Python interactan con el servidor web App Engine mediante el uso del protocolo CGI. Las aplicaciones pueden utilizar un framework de aplicaciones web compatible con WSGI mediante un adaptador de CGI.

Para facilitar el comienzo, App Engine incluye un framework de aplicaciones web sencillas denominado webapp.

Para aplicaciones de mayor tamao, los frameworks avanzados de terceros como Django, por ejemplo, tambin funcionan con App Engine.

GAE-Python: Entorno ejecucin

App Engine es compatible con Python 2.5.

Python se ejecuta en un entorno seguro de "zona de pruebas".

Puede ejecutar cualquier cdigo Python, incluidos los mdulos Python que contenga tu aplicacin, as como la biblioteca Python estndar.

El intrprete no puede cargar los mdulos Python con el cdigo C, puesto que se trata de un entorno Python "puro".

La zona de pruebas asegura que la aplicacin slo pueda realizar acciones que no interfieran con el rendimiento ni con la escalabilidad de otras aplicaciones.

El intrprete de Python genera una excepcin cuando una aplicacin intenta importar un mdulo de la biblioteca estndar conocida para trabajar fuera de las restricciones de la zona de pruebas.

GAE-Python: Python puro

El entorno incluye la biblioteca estndar de Python.

Algunos mdulos se han desactivado porque sus funciones principales no son compatibles con App Engine como :

La interconexin o la escritura en el sistema de archivos.

El mdulo os est disponible, pero algunas funciones no compatibles se encuentran inhabilitadas.

Si se intenta importar un mdulo no compatible o utilizar una funcin no compatible, se generar una excepcin.

GAE-Python: Mdulos

Algunos mdulos de la biblioteca estndar se han sustituido o se han personalizado para que funcionen con App Engine. Por ejemplo:

cPickle se ha aliado con pickle. Las funciones especficas de cPickle no son compatibles.

marshal est vaco. La importacin se realizar correctamente, pero no si se utiliza este mdulo.

Estos mdulos estn igualmente vacos: imp, ftplib, select, socket

tempfile se encuentra inhabilitado, salvo en el caso de TemporaryFile, que se ha aliado con StringIO.

logging est disponible y se recomienda su uso. Consulta la informacin que aparece a continuacin.

GAE-Python: No se puede

Escribir en el sistema de archivos. La lectura desde el sistema de archivos est permitida y todos los archivos de aplicacin subidos con la aplicacin estn disponibles.

Abrir un socket ni acceder a otro host directamente. Una aplicacin puede utilizar el servicio de extraccin de URL de App Engine para realizar solicitudes HTTP y HTTPS a otros hosts en los puertos 80 y 443, respectivamente.

Generar un subproceso. El procesamiento de una solicitud web a una aplicacin debe ser un nico proceso que dure unos cuantos segundos. Los procesos que tardan mucho tiempo en responder se finalizan para evitar la sobrecarga del servidor web.

Realizar otro tipo de llamadas al sistema.

GAE-Python: Tiempo de solicitud

Se dispone de una cantidad de tiempo limitada para generar y devolver una respuesta a una solicitud, en general, 30 segundos aproximadamente. Una vez alcanzado el plazo, el controlador de solicitudes se interrumpe.

El entorno de tiempo de ejecucin Python interrumpe el controlador de solicitudes mediante la generacin de la excepcin DeadlineExceededError del paquete google.appengine.runtime. Si el controlador de solicitud no detecta esta ni otras excepciones, el entorno de tiempo de ejecucin devuelve al cliente un error de servidor HTTP 500.

El controlador de solicitud puede detectar este error para personalizar la respuesta.

GAE-Python: Servicios ofrecidos

Almacn de datos. Incluye herramientas de modelado de datos muy completas para gestionar los esquemas de datos. El API admite dos interfaces para realizar consultas al almacn de datos, incluido GQL, un lenguaje de consultas similar a SQL que tambin se utiliza en la consola de administracin.

Memcache. Proporciona un almacenamiento en cach distribuido compatible con el API Memcache Python.

Extraccin de URL. Para acceder a recursos en la web usando los protocolos HTTP y HTTPS. Se pueden utilizar los mdulos urllib, urllib2 o httplib de la biblioteca estndar Python o bien el API de servicio de extraccin de URL de App Engine.

Envio de emails, tratamiento de imagenes, usar cuentas de google, tareas programadas, ...

GAE-Python: Solicitudes y CGI

Cuando App Engine recibe una solicitud web para tu aplicacin, App Engine ejecuta la secuencia de comandos de controlador que se corresponde con la URL, como se describe en el archivo de configuracin app.yaml de la aplicacin.

App Engine utiliza el estndar CGI para comunicar los datos de solicitud al controlador y recibir la respuesta.

App Engine utiliza varios servidores web para ejecutar tu aplicacin y ajustar automticamente el nmero de servidores en uso para procesar las solicitudes de una forma segura.

Una determinada solicitud se puede enviar a cualquier servidor, que no tiene que ser el mismo servidor que proces una solicitud anterior procedente del mismo usuario.

GAE-Python: Ejemplo app.yaml

application: myappversion: 1runtime: pythonapi_version: 1

handlers:- url: / script: home.py

- url: /index\.html script: home.py

- url: /stylesheets static_dir: stylesheets

- url: /(.*\.(gif|png|jpg)) static_files: static/\1 upload: static/(.*\.(gif|png|jpg))

- url: /admin/.* script: admin.py login: admin

- url: /.* script: not_found.py

GAE-Python: Herramientas

Incluye herramientas para probar tu aplicacin, subir los archivos de tu aplicacin, gestionar los ndices del almacn de datos, descargar los datos del registro y subir grandes cantidades de datos al almacn de datos:

Servidor de desarrollo: Simula el almacn de datos, los servicios y las restricciones.

appcfg.py: Herramienta multiuso para subir aplicacin, actualizacin de indice de datos, descargar logs, ...

Subida de datos: Puede aadir datos al almacn de datos de tu aplicacin desde tus archivos de datos locales. Esta herramienta puede extraer los datos de los archivos CSV, un formato de hoja de clculo compatible con la mayora de software de hojas de clculo como, por ejemplo, Google Docs o Microsoft Excel.

GAE-Python: Bibliotecas externas

Django 0.96.1

WebOb 0.9

PyYAML 3.05

Puedes incluir otras bibliotecas Python puras en tu aplicacin.

GAE-Python: WEBAPP

Google App Engine admite cualquier framework creado en su totalidad con Python que utilice el estndar CGI.

Y cualquier framework compatible con WSGI que utilice un adaptador de CGI.

Incluidos Django, CherryPy, Pylons y web.py.

App Engine incluye un sencillo framework para aplicaciones web denominado webapp.

El framework webapp est instalado en el entorno de App Engine y en el kit de desarrollo de software (SDK), por lo que no tendrs que asociarlo al cdigo de tu aplicacin para utilizarlo.

GAE-Webapp: Partes

Una o varias clases RequestHandler que procesan solicitudes y generan respuestas,

Una instancia de WSGIApplication que dirige las solicitudes entrantes a los controladores en funcin de su URL.

Una rutina principal que ejecuta WSGIApplication con un adaptador de CGI.

GAE-Webapp: Hola Mundo

from google.appengine.ext import webappfrom google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication( [('/', MainPage)], debug=True)

def main(): run_wsgi_app(application)

if __name__ == "__main__": main()

GAE-Webapp: Funciones

El mdulo webapp est incluido en el paquete google.appengine.ext. Este mdulo se facilita con el SDK y tambin se encuentra en el entorno de tiempo de ejecucin de produccin.

Cuando webapp recibe una solicitud GET HTTP para una URL , crea una instancia de la clase y ejecuta el mtodo get de esa instancia.

Se puede obtener informacin sobre la solicitud y respuesta dentro del mtodo con self.request y self.response.

La propia aplicacin se representa mediante una instancia de webapp.WSGIApplication.

La funcin run_wsgi_app() utiliza una instancia WSGIApplication (u otro objeto de aplicacin compatible con WSGI) y la ejecuta en el entorno CGI de App Engine.

GAE-Webapp: Cuentas google

from google.appengine.api import usersfrom google.appengine.ext import webappfrom google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler): def get(self): user = users.get_current_user()

if user: self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hello, ' + user.nickname()) else: self.redirect(users.create_login_url(self.request.uri))

application = webapp.WSGIApplication([('/', MainPage)], debug=True)

def main(): run_wsgi_app(application)

if __name__ == "__main__": main()

GAE-Django: Introduccin

Google App Engine incluye Django 0.96.

Si ests utilizando la ltima versin estable, no tendrs que instalar nada.

Slo tendrs que importar tus mdulos de Django como haras normalmente.

Tambin se cubren las modificaciones que se deben incluir si se utiliza la versin de desarrollo de Django.

GAE-Django: Controlador WSGI I

Para que tu aplicacin Django se inicie con el controlador WSGI, slo tienes que realizar unos sencillos pasos.

Debes importar util desde google.appengine.ext.webapp y el mdulo del controlador desde Django.

Por otra parte, en lugar de gestionar las excepciones con manage.py, es posible registrar todas las excepciones con Google App Engine y visualizar los registros en la consola de administracin.

GAE-Django: Controlador WSGI II

import logging, os

# Google App Engine imports.from google.appengine.ext.webapp import util

# Force Django to reload its settings.from django.conf import settingssettings._target = None

# Must set this env var before importing any part of Djangoos.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import loggingimport django.core.handlers.wsgiimport django.core.signalsimport django.dbimport django.dispatch.dispatcher

GAE-Django: Controlador WSGI III

def log_exception(*args, **kwds): logging.exception('Exception in request:')

# Log errors.django.dispatch.dispatcher.connect( log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.django.dispatch.dispatcher.disconnect( django.db._rollback_on_exception, django.core.signals.got_request_exception)

def main(): # Create a Django application for WSGI. application = django.core.handlers.wsgi.WSGIHandler()

# Run the WSGI CGI handler with that application. util.run_wsgi_app(application)

if __name__ == '__main__': main()

GAE-Django: Controlador WSGI IV

app.yaml

application: my_applicationversion: 1runtime: pythonapi_version: 1

handlers:- url: /static static_dir: static- url: /.* script: main.py

GAE-Django: Versin de desarrollo I

Para utilizar la versin de desarrollo, debes descargar todo el proyecto de Django e incluirlo en el directorio de nivel superior de tu aplicacin.

Para reducir el nmero de archivos implementados en Google App Engine, puedes eliminar los siguientes directorios de tu carpeta de Django:

django/bin

django/contrib/admin

django/contrib/auth

django/contrib/databrowse

django/test

Se tiene que modificar "main.py" para eliminar la versin estndar de Django y cargar la copia que hayas incluido con tu aplicacin.

GAE-Django:Versin de desarrollo II

import logging, os, sys

# Google App Engine imports.from google.appengine.ext.webapp import util

# Remove the standard version of Django.for k in [k for k in sys.modules if k.startswith('django')]: del sys.modules[k]

# Force sys.path to have our own directory first, in case we want to import# from it.sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# Must set this env var *before* importing any part of Djangoos.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

GAE-Django:Versin desarrollo III

import django.core.handlers.wsgiimport django.core.signalsimport django.dbimport django.dispatch.dispatcher

def main(): # Create a Django application for WSGI. application = django.core.handlers.wsgi.WSGIHandler()

# Run the WSGI CGI handler with that application. util.run_wsgi_app(application)

if __name__ == '__main__': main()

GAE-Django: Configuracin I

App Engine no admite los modelos de Django.

Se tienen que dejar vacas todas las cadenas "DATABASE_*".

Las aplicaciones y el middleware de administracin y autenticacin se debern inhabilitar, ya que requieren el uso de modelos de Django.

Las funciones que proporcionan se encuentran cubiertas por la consola de administracin y el API de usuarios de App Engine, respectivamente.

Las sesiones tambin dependen de modelos de Django, por lo que tambin tienes que inhabilitarlas.

Por ltimo, debers sustituir las referencias a "project.ap" con "app" y establecer de forma dinmica la ruta de tu directorio de plantillas.

GAE-Django: Configuracin II

import osROOT_URLCONF = 'urls' # Replace 'project.urls' with just 'urls'MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware',# 'django.contrib.sessions.middleware.SessionMiddleware',# 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware',)INSTALLED_APPS = (# 'django.contrib.auth', 'django.contrib.contenttypes',# 'django.contrib.sessions', 'django.contrib.sites',)ROOT_PATH = os.path.dirname(__file__)TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or # "C:/www/django/templates". Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. ROOT_PATH + '/templates',)

GAE-Django: Entorno desarrollo

El kit de desarrollo de software (SDK) de Google App Engine incluye el servidor web de desarrollo dev_appserver.py.

Te permite implementar tu aplicacin en el entorno de desarrollo de Google App Engine.

Adems, no tendrs que utilizar manage.py para sincronizar tu base de datos al utilizar el almacn de datos de Google App Engine.

Referencias

Python en GAEhttp://code.google.com/intl/es/appengine/docs/python/gettingstarted/introduction.html

Django en GAEhttp://code.google.com/intl/es-ES/appengine/articles/django.html

Almacenamiento de datos para Django en GAEhttp://code.google.com/intl/es-ES/appengine/articles/django-nonrel.html