Professional Documents
Culture Documents
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
Metodologas tradicionales
Anlisis de requisitos Especificacin y diseo del sistema Implementacin Pruebas Documentacin Es una metodologa pesada No responde bien ante el cambio
4
Principal problema:
El cliente
no sabe de tecnologa no sabe lo que quiere, si no lo ve antes prefiere algo funcional que leer un diseo
Es difcil tener todos los cabos atados La tecnologa cambia rpido Siempre surgen problemas
Metodologas giles
Se enfrentan a las metodologas tradicionales nfasis en la adaptabilidad del proceso Agilizan los procesos de desarrollo Da por hecho que los requisitos cambiarn Intenta:
Prever el cambio lo antes posible: entrega constante Responder al cambio de forma rpida
7
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
gil
Rpido de desarrollar Rpido ciclo de desarrollo Flexible Facilitar el despliegue Cdigo legible, mantenible y bello Convencin sobre configuracin Divertido ;-)
10
Simple
sistema de permisos y usuarios construccin/validacin de formularios creacin del modelo de datos creacin de datos de prueba
12
Sin ORM
cursor.execute(SELECT*FROMpersonas\ WHEREedad=+20) forrowincursor.fetchall(): id=row[0] edad=row[1] cursor.execute(UPDATEpersonasWHEREid=%s\ SETedad=%d%(id,edad+1))
Con ORM
forpinPersonas.listado(edad=20):#ejecutaSELECT p.edad=p.edad+1 p.nombre=Juan p.update()#ejecutaUPDATE
13
Instalacin y despliegue
Scripts de automatizacin para todo Creacin automtica del esquema de datos Creacin automtica de datos de prueba Tests unitarios, de carga y funcionales Te quita el miedo a:
simple + legible = cdigo mantenible el cdigo es ledo mucho ms que escrito oriente a formar sistemas simples resulte fcilmente mantenible no quiero configurar 10 ficheros XML debe convenirse la norma comn slo configurar la excepcin a la norma
15
Framework que
Te generan parte del cdigo Te configuran los ficheros XMLs Los wizards NO son la excusa RECUERDA: El cdigo es ledo ms que escrito
16
Por ltimo
Fcilmente integrable con otros Eficiente y escalable Mejor explcito que implcito
Minimizar la magia Datos/Lgica/Presentacin No obligarte a un IDE concreto Permitir sistema de control de versiones
17
Separar capas
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
18
Es J2EE gil?
Respuesta: NO
Muchos ficheros XMLs Errores de compilacin detectados en ejecucin Compilar todo Generar .war Muchas veces, reiniciar Tomcat
19
Es J2EE gil?
IDEs de desarrollo
Completan el cdigo (setters, getters, etc.) Mantienen XML sincronizados Facilitan el despliegue Tienen wizards, plugins, herramientas
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
21
Lenguaje Python
Python vs Java
http://www.abelgonzalez.com/entornosabiertos/no-olvides-el-vajillafactory_p154.html
23
Hola mundo
Java
Python
printHolamundo
24
Leer de un fichero
Java
Python
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
26
Introduccin a Django
Caractersticas bsicas
Lenguaje Python Desarrollo muy rpido Similar Ruby on Rails Busca el perfeccionismo Patrn MVC Amplia comunidad Hermanos mayores como Google
Ejemplo: Google App Engine slo soporta python e integra Django por defecto.
27
Introduccin a Django
Diseo perfeccionista
Cdigo muy legible Exquisita metodologa desarrollo Perfecta documentacin ORM Diseador URLs Vistas (~controladores) Plantillas
28
Componentes fundamentales
Introduccin a Django
Interfaz administracin automtica Sistema de formularios Sistema de autenticacin/autorizacin Internacionalizacin Sistema de cach Framework de sindicacin Framework testing unitario y funcional Serializador XML y JSON Sistema GIS ... 29
Introduccin a Django
Ms en
Introduccin a Django
Recursos bsicos
Documentacin oficial
31
Introduccin a Django
Modelo de datos
32
Introduccin a Django
Modelo de datos
Ejemplo de uso
>>>madrid=Equipo(nombre='RealMadrid') >>>madrid.save()#ejecutaINSERT >>>jug=Jugador(nombre='Raul',equipo=madrid) >>>jug.save()#ejecutaINSERT >>>jug.equipo.nombre 'RealMadrid' >>>jug2=Jugador(nombre='Casillas',equipo=madrid) >>>jug2.save() >>>forjinJugador.objects.all():#efectuaSELECT ...printj.nombre Raul Casillas
33
Introduccin a Django
Permite definir tus propios mappings Aumenta complejidad Quiere cubrir 100% de casustica Cdigo ms legible y mantenible Desarrollo mucho ms rpido Quiere cubrir 99% casustica.
Introduccin a Django
Introduccin a Django
<?xmlversion="1.0"?> <!DOCTYPEhibernatemappingPUBLIC"//Hibernate/HibernateMapping DTD2.0//EN"http://hibernate.sourceforge.net/hibernatemapping 2.0.dtd"> <hibernatemapping> <classname="com.example.model.Equipo"table="equipos"> <idname="id"column="id"><generatorclass="native"/></id> <propertyname="nombre"column="nombre"/> </class> </hibernatemapping>
36
Introduccin a Django
... Configurationcfg=newConfiguration(); cfg.addResource("Project.hbm.xml"); cfg.setProperties(System.getProperties()); SessionFactorysf=cfg.buildSessionFactory(); Sessions=sf.openSession(); Transactiontx=s.beginTransaction(); Equipoequipo=newEquipo(); equipo.setNombre("RealMadrid"); s.save(project);tx.commit();s.close();
37
Introduccin a Django
Diseo de URLs
Introduccin a Django
Diseo de URLs
Se implementan con expresiones regulares Hay un mappeador de URLs Proporciona seguridad Enlazan con las vistas (controlador)
Ejemplo:
Introduccin a Django
Vistas
Realizan la lgica de la aplicacin Es parecido al controlador MVC Suele renderizar una plantilla Ejemplo:
Introduccin a Django
Plantillas
Filosofa
No incluir lgica en plantillas No usar XML (no slo pensado para HTML) Facilitar la sintaxis para el diseador Muy legible Soporta herencia de plantillas Extensible
Lenguaje propio
41
Introduccin a Django
Plantillas
Ejemplo:
{%extends"base.html"%} {%blockcontenido%} <ul> {%forninnoticias%} <li> <ahref="/noticias/{{n.id}}/"> {{n.titulo|upper}} </a> </li> {%endfor%} </ul> {%endblock%}
42
Introduccin a Django
Formularios
Componentes
43
Introduccin a Django
Formularios
Ejemplos simples:
Introduccin a Django
Formularios
Uso en consola:
>>>fromequipos.formsimportEquipoForm >>>form=EquipoForm() >>>printform <tr><th><label for="id_nombre">Nombre:</label></th><td><input id="id_nombre"type="text"name="nombre" maxlength="100"/></td></tr> >>>printform.as_p() <p><labelfor="id_nombre">Nombre:</label><input id="id_nombre"type="text"name="nombre" maxlength="100"/></p> ...(cont.)
45
Introduccin a Django
>>>fromequipos.modelsimportEquipo >>>equipo=Equipo.objects.get(nombre='RealMadrid') >>>form=EquipoForm(instance=equipo) >>>printform.as_p() <p><labelfor="id_nombre">Nombre:</label><input id="id_nombre"type="text"name="nombre"value="Real Madrid"maxlength="100"/></p> >>>datos_peticion_post={'nombre':'Barcelona'} >>>form=EquipoForm(datos_peticion_post) >>>nuevo_equipo=form.save()#ejecutasqlINSERT >>>datos_incorrectos={'nombre':''} >>>form=EquipoForm(datos_peticion_post) >>>form.is_valid() False >>>form.errors() {'nombre':[u'Thisfieldisrequired.']}
46
Introduccin a Django
Formularios
En vista Django:
fromequipos.formsimportEquipoForm defcrea_equipo(request): ifrequest.method=='POST': #peticionPOSTconformulariorelleno form=EquipoForm(request.POST) ifform.is_valid(): returnHttpResponseRedirect('/gracias/') else:#formulariosinrellenar form=EquipoForm() returnrender_to_response('crea_equipo.html', {'form':form})
47
Introduccin a Django
Formularios
En plantilla:
48
Introduccin a Django
Formularios
Ejemplo ms complejo
49
Introduccin a Django
Otros componentes
Middlewares
Cambio de idioma segn lenguaje navegador Ofuscacin de toda ocurrencia de emails http://docs.djangoproject.com/en/dev/topics/http/middleware/
Cach
Introduccin a Django
Otros componentes
Autenticacin/autorizacin
Contiene:
I18N
Introduccin a Django
Otros componentes
Serializacin
Sistema de testeo
http://docs.djangoproject.com/en/dev/topics/testing/
52
Introduccin a Django
An ms componentes
http://docs.djangoproject.com/en/dev/topics/http/sessions/
http://docs.djangoproject.com/en/dev/topics/signals/
http://docs.djangoproject.com/en/dev/ref/contrib/admin/
http://docs.djangoproject.com/en/dev/ref/contrib/syndication/
http://docs.djangoproject.com/en/dev/ref/generic-views/
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
54
DEMO
55
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
56
Django by example
Implementacin general Agregacin RSS Editor inline Middleware Cach Cdigo Django resultante Resultado final
Anlisis
57
Django by example
Pgina inicial
http://www.yaco.es/
58
Django by example
Vida en Yaco
http://www.yaco.es/nosotros/vida_en_yaco/
59
Django by example
Comunidad
http://www.yaco.es/community/actualidad/
60
ndice de contenidos
1. 2. 3. 4. 5. 6. 7. 8.
Introduccin a metodologas giles Qu pedir a un framework web? Es J2EE gil? Python, ejemplo de lenguage gil Introduccin a Django Demo, desarrollo en Django Django by example Reflexiones finales
61
Reflexiones finales
Reflexiones finales
Es necesario replantearse el proceso de desarrollo de aplicaciones web? J2EE es siempre una buena eleccin para el desarrollo web? Son los entornos comerciales realmente tan productivos como prometen sus fabricantes? Algn da veremos el lmite de posibilidades que trae Django?
62
Dudas? Sugerencias?
63