Upload
bluevia
View
1.914
Download
0
Embed Size (px)
DESCRIPTION
Presentación para el workshop de App Circus de Madrid en noviembre 2012
Citation preview
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Borja Guardiola – 8 Nov 2012
@bluevia_es
@borjaguardiola
Borja at tid.es
Agenda
1. Python
2. Entorno
3. Django
4. Despliegue en local
5. Despliegue en la nube
6. Heroku
7. Instant Servers
Python
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.
Características:• Multiparadigma ya que soporta orientación a objetos, programación
imperativa y, en menor medida, programación funcional.• Lenguaje interpretado• Usa tipado dinámico• Es fuertemente tipado• Multiplataforma..
Virtualenv
Virtualenv es una herramienta para crear entornos de Python aislados
Para crear un entorno virtual
$ Virtualenv venv
pip
Herramienta de instalación de paquetes de Python.
$ pip install –r requirements.txt
requirements:txt:- Django==1.4- httplib2==0.7.2- oauth2==1.5.211
Django - createproject
Django es un framework de desarrollo web de código abierto, escrito en Python, que cumple en cierta medida el paradigma del Modelo Vista Controlador.
Creamos proyecto Django
$ python venv/lib/site-packages/django/bin/django-admin.py startproject bvstore$ python manage.py runserver 0.0.0.0:8000
bvstore/manage.pybvstore/
__init__.pysettings.pyurls.pywsgi.py
Django - startapp
Creamos una aplicación
$ python manage.py startapp purchases
purchases/__init__.pymodels.pytests.pyviews.py
Django – models.py
Actualizamos el modelo
$ editor models.py
class Product(models.Model): name = models.CharField(max_length=40) content_url = models.CharField(max_length=100) image_url = models.CharField(max_length=100) price = models.IntegerField() currency = models.CharField(max_length=5)
def __unicode__(self): return self.name + "-" + str(self.price) + " " + self.currency
$ python manage.py syncdb
Django – models.py
Jugando con el API
$ python manage.py shell
from purchases.models import Product
Product.objects.all()
p = Product(name="La Roca",content_url="http://video.com/laroca",image_url="http://laroca.com/i
mg.jpg",price=3,currency="EUR")
p.save()
Product.objects.filter(name=“La Roca”)
Django – settings.py
Configuración del proyecto
STATICFILES_DIRS = ( os.path.dirname(os.path.realpath(__file__))+"/../static",)
INSTALLED_APPS = ('bvstore.purchases',
)DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'storeapp.database’, }}
Admin options
Django - urls
Declaración de urls del proyecto. Es una “tabla de contenidos” del proyecto. Las urls tienen la forma:
(regular expression, Python callback function [, optional dictionary])
$ editor urls.py
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',url(r'^$', ‘purchases.views.home', name='home'),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),url(r'^admin/', include(admin.site.urls)),
)
Django - admin
Administración de la base de datos
$ editor models.py
admin.site.register(BVApp)admin.site.register(Purchase)
Django - views
Lógica de la aplicación (controlador):
$ editor views.py
def home(request): return HttpResponse("Hola mundo. Estás en la home.")
def movies(request): return HttpResponse("Hola mundo. Estás en la categoría de películas.")
Django - templates
Interfaz de la aplicación (vistas). Html con etiquetas especiales.
$ editor settings.py
TEMPLATE_DIRS = (os.path.dirname(os.path.realpath(__file__))+"/templates“
)
$ editor views.py
return render_to_response('store.html',context_instance=RequestContext(request))
Django - templates
Interfaz de la aplicación (vistas). Html con etiquetas especiales.
$ editor store.html
{% if purchase_list %}
<h6>Películas compradas</h6>
{% for p in purchase_list %}
<p>{{ p.product_name }}</p>
{% endfor %}
{% else %}
<h6>No hay ninguna compra realizada.</h6>
{% endif %}
Bluevia
Bluevia es la iniciativa de desarrolladores de Telefónica y Telenor, que ofrece principalmente APIs de pagos y comunicaciones pero también otros productos y servicios que son de ayuda a los desarrolladores (ej. Instant Servers, Arduino)
Bluevia - Pagos
Flujo de pago de Bluevia
1. Autorización + callback (Oauth like)
2. Invocación del pago
3. Status (opcional)
Bluevia - Pagos
Autorización
$ editor views.py
• Autorización purchase
• Callback authorized
• Invocación del pago authorized
Desplegar en Cloud
Other detailsIncluding date etc.
Los nuevos Clientes Siempre conectados a través de diferentes dispositivos
Son consumidores de información y servicios pero también creadores de contenidos
Los clientes tienen nuevas necesidades que las empresas digitales pueden satisfacer aprovechando las ventajas de la Cloud Pública.
Emprendedores digitales Ofrecen servicios a través de una o varias aplicaciones a sus clientes/usuarios (empresas o
particulares)
Los ingresos se generan al cobrar cuota por servicio, por publicidad o en modalidades mixtas «freemium»
La nube Servidores que alojan aplicaciones de las nuevas empresas para permitir que sus usuarios
puedan conectarse desde cualquier lugar y dispositivo
La «Cloud» pública: el modelo más eficiente para las start-ups
¿Por qué Cloud Pública?
Other detailsIncluding date etc.
Sin inversiones, sin amortizaciones. Pago por horas de uso.
Proyectos que arrancan, con incertidumbre de futuro. Poco presupuesto en el arranque. Necesidad de variabilizar los costes.
Flexibilidad inmediata para crecer o decrecer y solo pagar por lo usado.
Demanda desconocida, muy poca al principio pero con crecimientos rápidos.
Provisión inmediata que permite tener las máquinas funcionando en minutos.
Entorno muy cambiante en el que solo los más ágiles triunfan.
Servicio gestionado por un experto. SLAs y disponibilidades de servicio.
Empresas muy pequeñas, los emprendedores deben enfocarse en su negocio y no preocuparse por lo que lo sustenta.
Condicionantes de los emprendedores digitales
Ventajas de la Cloud Pública
PaaS e IaaS
Other detailsIncluding date etc.
PaaS: Plataforma com
o Servicio (H
eroku)
IaaS
: Inf
raes
truc
tura
com
o Se
rvic
io (I
nsta
nt S
erve
rs)
Heroku deploy
PaaS que soporta Ruby, Java, Node.js, Scala, Clojure and Python
Best practices de www.12factor.net
Pasos:
• Creación de cuenta
• Heroku client
• Requirements.txt (psycopg2==2.4.5 dj-database-url==0.2.0)
• Procfile
• Crear aplicación (heroku apps:create circusapp -s cedar)
• Crear base de datos (add-on)
Heroku deploy (II)
Pasos:
• Promote DB – Establece BBDD por defecto (heroku pg:promote HEROKU_POSTGRESQL_AQUA)
• Syncdb (heroku run python bvstore/manage.py syncdb)
• Despliegue git push (git push heroku master)
• Enjoy! http://circusapp.herokuapp.com/movies
Instant Servers deploy
IaaS, el servicio de Cloud Pública de Telefónica para las start-ups digitalesOfrece provisión inmediata, total libertad de gestión de las diferentes máquinas, virtuales, pago por uso y alta disponibilidad y rendimiento
Pasos:
• Creación de cuenta
• Configuración clave ssh
• Copiar site
• Crear virtualenv (python virtualenv.py --system-site-packages ~/projects/site/venv)
• Instalar dependencias (pip install -r requirements)
• Sincronizar BBDD
• Runserver y enjoy! http://81.45.18.53:8000/movies
Comparativa PaaS vs. IaaS
Other detailsIncluding date etc.
Completamente flexible. Permite instalar cualquier cosa en la máquina.
Más barato en producción.
1 mes gratis sin límite de capacidad.
SLAs a nivel de máquina y servicio
Requiere más conocimientos y es necesario realizar más tareas de administración y configuración.
Sin entorno de desarrollo gratuito (máquina 0,5 gratis 6 meses próximamente)
(Se factura por máquina – 0,06$ máquina 1GB/hora)
Fácil y sencillo de usar. Se despliega una aplicación muy rápido.Entorno de desarrollo gratuito (1 hilo / 10.000 registros BD)SLAs a nivel de aplicación.
Menos flexible, tiene una serie de add-ons de pago pero no permite instalar software aparte.Más caro en producción.
(Se factura por hilos de ejecución – 0,05$ 1 hilo/hora)
PaaS: Plataforma como Servicio (Heroku)
IaaS: Infraestructura como Servicio (Instant Servers)
+
-
+
-
Instant Servers
Other detailsIncluding date etc.
www. Ins tan tServers .es
Soporte en castellano Datos alojados en España o UK Calidad y niveles de servicio garantizados por contrato (99,9% de
disponibilidad trimestral por máquina con penalizaciones)
Tecnología 20-30% más potente
Credits
• www.python.org/
• www.djangoproject.com/
• foundation.zurb.com/
• www.heroku.com
• www.instantservers.es
• www.bluevia.com
Preguntas?