Beruflich Dokumente
Kultur Dokumente
ANGO
#n$ice $e con%eni$os
1. ". 4. 5. 9. :. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
"
#n$ice $e con%eni$os
1. ". 4. 5. 9. :. ;. =.
Introduccin a metodologas giles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
Me%o$olo()as %&a$icionales
An*lisis $e &e?uisi%os Es.eci/icaci'n y $ise@o $el sis%ema Im.lemen%aci'n P&ue2as Documen%aci'n Es una me%o$olo()a .esa$a No &es.on$e 2ien an%e el cam2io
5
P&inci.al .&o2lemaA
El clien%e
no sa2e $e %ecnolo()a no sa2e lo ?ue ?uie&e7 si no lo Be an%es .&e/ie&e al(o /uncional ?ue lee& un $ise@o
Es $i/)cil %ene& %o$os los ca2os a%a$os La %ecnolo()a cam2ia &*.i$o Siem.&e su&(en .&o2lemas
Me%o$olo()as *(iles
Se en/&en%an a las me%o$olo()as %&a$icionales Dn/asis en la a$a.%a2ili$a$ $el .&oceso A(iliEan los .&ocesos $e $esa&&ollo Da .o& 6ec6o ?ue los &e?uisi%os cam2ia&*n In%en%aA
P&eBe& el cam2io lo an%es .osi2leA en%&e(a cons%an%e Res.on$e& al cam2io $e /o&ma &*.i$a
;
#n$ice $e con%eni$os
1. 2. 4. 5. 9. :. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles Qu pedir a un framework web? +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
(il
R*.i$o $e $esa&&olla& R*.i$o ciclo $e $esa&&ollo Jle<i2le Jacili%a& el $es.lie(ue C'$i(o le(i2le7 man%eni2le y 2ello ConBenci'n so2&e con/i(u&aci'n DiBe&%i$o KLM
1I
Sim.le
sis%ema $e .e&misos y usua&ios cons%&ucci'nNBali$aci'n $e /o&mula&ios c&eaci'n $el mo$elo $e $a%os c&eaci'n $e $a%os $e .&ue2a
La m*?uina c&ea el S,L El c'$i(o &esul%a m*s le(i2le Aumen%a la se(u&i$a$ $e %u sis%ema
1"
Sin ORM
cursor.execute(SELECT * FROM personas \ WHERE edad= + 20) for row in cursor.fetchall(): id = row[0] edad = row[1] cursor.execute(UPDATE personas WHERE id=%s \ SET edad=%d % (id, edad+1))
Con ORM
for p in Personas.listado(edad=20): # ejecuta SELECT p.edad = p.edad + 1 p.nombre = Juan p.update() # ejecuta UPDATE
14
Ins%alaci'n y $es.lie(ue
Sc&i.%s $e au%oma%iEaci'n .a&a %o$o C&eaci'n au%om*%ica $el es?uema $e $a%os C&eaci'n au%om*%ica $e $a%os $e .&ue2a Ces%s uni%a&ios7 $e ca&(a y /uncionales Ce ?ui%a el mie$o aA
sim.le S le(i2le T c'$i(o man%eni2le el c'$i(o es le)$o muc6o m*s ?ue esc&i%o o&ien%e a /o&ma& sis%emas sim.les &esul%e /*cilmen%e man%eni2le no ?uie&o con/i(u&a& 1I /ic6e&os UML $e2e conBeni&se la no&ma comVn s'lo con/i(u&a& la e<ce.ci'n a la no&ma
19
J&ame0o&1 ?ue
Ce (ene&an .a&%e $el c'$i(o Ce con/i(u&an los /ic6e&os UMLs Los 0iEa&$s ! son la e<cusa RECRERDAA "l cdigo es ledo ms #ue escrito
1:
Po& Vl%imo
J*cilmen%e in%e(&a2le con Go%&osH E/icien%e y escala2le Me8o& e<.l)ci%o ?ue im.l)ci%o
MinimiEa& la ma(ia Da%osNL'(icaNP&esen%aci'n No o2li(a&%e a un IDE conc&e%o Pe&mi%i& sis%ema $e con%&ol $e Be&siones
1;
Se.a&a& ca.as
#n$ice $e con%eni$os
1. ". $. 5. 9. :. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 "s %2"" gil? Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
1=
Res.ues%aA NO
Muc6os /ic6e&os UMLs E&&o&es $e com.ilaci'n $e%ec%a$os en e8ecuci'n Com.ila& %o$o Gene&a& .0a& Muc6as Beces7 &einicia& Comca%
1F
IDEs $e $esa&&ollo
Com.le%an el c'$i(o Pse%%e&s7 (e%%e&s7 e%c.M Man%ienen UML sinc&oniEa$os Jacili%an el $es.lie(ue Cienen 0iEa&$s7 .lu(ins7 6e&&amien%as
#n$ice $e con%eni$os
1. ". 4. &. 9. :. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 '(t)on* e+emplo de lenguage gil In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
"1
Len(ua8e Py%6on
def load_comics(path): comics = {} file = open(path) for line in file.read(): url, name = line.split(':') comics[url] = name.strip() return comics
""
Py%6on Bs !aBa
http://www.abelgonzalez.com/entornosabiertos/no-olvides-el-vajillafactory_p154.html
"4
G>ola mun$oH
!aBa
public class HolaMundo { public static void main (String[] args) { System.out.println("Hola mundo"); } }
Py%6on
"5
Lee& $e un /ic6e&o
!aBa
import java.io.*; BufferedReader fichero = new BufferedReader( new FileReader(entrada.txt)); while((linea=fichero.readLine())!=null) System.out.println(linea);
Py%6on
#n$ice $e con%eni$os
1. ". 4. 5. ,. :. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il Introduccin a -+ango Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le Re/le<iones /inales
":
In%&o$ucci'n a D8an(o
Ca&ac%e&)s%icas 2*sicas
Len(ua8e Py%6on Desa&&ollo muy &*.i$o Simila& Ru2y on Rails usca el .e&/eccionismo Pa%&'n MWC Am.lia comuni$a$ >e&manos mayo&es como Goo(le
"+emploA Google App E gi e s'lo so.o&%a .y%6on e in%e(&a D8an(o .o& $e/ec%o.
";
In%&o$ucci'n a D8an(o
Dise@o .e&/eccionis%a
C'$i(o muy le(i2le E<?uisi%a me%o$olo()a $esa&&ollo Pe&/ec%a $ocumen%aci'n ORM Dise@a$o& RRLs Wis%as PXcon%&ola$o&esM Plan%illas
"=
Com.onen%es /un$amen%ales
In%&o$ucci'n a D8an(o
In%e&/aE a$minis%&aci'n au%om*%ica Sis%ema $e /o&mula&ios Sis%ema $e au%en%icaci'nNau%o&iEaci'n In%e&nacionaliEaci'n Sis%ema $e cac6J&ame0o&1 $e sin$icaci'n J&ame0o&1 %es%in( uni%a&io y /uncional Se&ialiEa$o& UML y !SON Sis%ema GIS ... "F
In%&o$ucci'n a D8an(o
M*s en
In%&o$ucci'n a D8an(o
Recu&sos 2*sicos
Documen%aci'n o/icial
41
In%&o$ucci'n a D8an(o
Mo$elo $e $a%os
class Equipo(models.Model): nombre = models.CharField(max_length=100) class Jugador(models.Model): nombre = models.CharField(max_length=100) equipo = models.ForeignKey(Equipo)
4"
In%&o$ucci'n a D8an(o
Mo$elo $e $a%os
E8em.lo $e uso
>>> madrid = Equipo(nombre='Real Madrid') >>> madrid.save() # ejecuta INSERT >>> jug = Jugador(nombre='Raul', equipo=madrid) >>> jug.save() # ejecuta INSERT >>> jug.equipo.nombre 'Real Madrid' >>> jug2 = Jugador(nombre='Casillas', equipo=madrid) >>> jug2.save() >>> for j in Jugador.objects.all(): # efectua SELECT ... print j.nombre Raul Casillas
44
In%&o$ucci'n a D8an(o
Pe&mi%e $e/ini& %us .&o.ios ma..in(s Aumen%a com.le8i$a$ ,uie&e cu2&i& 1IIY $e casu)s%ica C'$i(o m*s le(i2le y man%eni2le Desa&&ollo muc6o m*s &*.i$o ,uie&e cu2&i& FFY casu)s%ica.
In%&o$ucci'n a D8an(o
publicclassEquipo{
privateStringnombre; publicLonggetId(){ returnid;} publicvoidsetId(id){ this.id=id;} publicStringgetNombre(){ returnnombre; } publicvoidsetNombre(String nombre){ this.nombre=nombre; } }
49
In%&o$ucci'n a D8an(o
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" http://hibernate.sourceforge.net/hibernate-mapping2.0.dtd"> <hibernate-mapping> <class name="com.example.model.Equipo" table="equipos"> <id name="id" column="id"> <generator class="native"/></id> <property name="nombre" column="nombre"/> </class> </hibernate-mapping>
4:
In%&o$ucci'n a D8an(o
... Configuration cfg = new Configuration(); cfg.addResource("Project.hbm.xml"); cfg.setProperties(System.getProperties()); SessionFactory sf = cfg.buildSessionFactory(); Session s = sf.openSession(); Transaction tx = s.beginTransaction(); Equipo equipo = new Equipo(); equipo.setNombre("Real Madrid"); s.save(project); tx.commit(); s.close();
4;
In%&o$ucci'n a D8an(o
Dise@o $e RRLs
In%&o$ucci'n a D8an(o
Dise@o $e RRLs
Se im.lemen%an con e<.&esiones &e(ula&es >ay un ma..ea$o& $e RRLs P&o.o&ciona se(u&i$a$ EnlaEan con las Bis%as Pcon%&ola$o&M
E8em.loA
from news.views import caso_especial_03, lista_anual urlpatterns = patterns('', ('^noticias/2003/$', caso_especial_03), ('^noticias/(\d{4})/$', lista_anual), )
4F
In%&o$ucci'n a D8an(o
Wis%as
RealiEan la l'(ica $e la a.licaci'n Es .a&eci$o al con%&ola$o& MWC Suele &en$e&iEa& una .lan%illa E8em.loA
from news.models import Noticia def lista_anual(request, anyo): noticias = Noticia.objects.filter(anyo=anyo) return render_to_response('noticias.html', {'noticias': noticias})
5I
In%&o$ucci'n a D8an(o
Plan%illas
Jiloso/)a
No inclui& l'(ica en .lan%illas No usa& UML Pno s'lo .ensa$o .a&a >CMLM Jacili%a& la sin%a<is .a&a el $ise@a$o& Muy le(i2le So.o&%a 6e&encia $e .lan%illas E<%ensi2le
Len(ua8e .&o.io
51
In%&o$ucci'n a D8an(o
Plan%illas
E8em.loA
{% extends "base.html" %} {% block contenido %} <ul> {% for n in noticias %} <li> <a href="/noticias/{{ n.id }}/"> {{ n.titulo|upper }} </a> </li> {% endfor %} </ul> {% endblock %}
5"
In%&o$ucci'n a D8an(o
Jo&mula&ios
Com.onen%es
54
In%&o$ucci'n a D8an(o
Jo&mula&ios
E8em.los sim.lesA
In%&o$ucci'n a D8an(o
Jo&mula&ios
Rso en consolaA
>>> from equipos.forms import EquipoForm >>> form = EquipoForm() >>> print form <tr><th><label for="id_nombre">Nombre:</label></th><td><input id="id_nombre" type="text" name="nombre" maxlength="100" /></td></tr> >>> print form.as_p() <p><label for="id_nombre">Nombre:</label> <input id="id_nombre" type="text" name="nombre" maxlength="100" /></p> ... (cont.)
59
In%&o$ucci'n a D8an(o
>>> from equipos.models import Equipo >>> equipo = Equipo.objects.get(nombre='Real Madrid') >>> form = EquipoForm(instance=equipo) >>> print form.as_p() <p><label for="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() # ejecuta sql INSERT >>> datos_incorrectos = {'nombre': ''} >>> form = EquipoForm(datos_peticion_post) >>> form.is_valid() False >>> form.errors() {'nombre': [u'This field is required.']}
5:
In%&o$ucci'n a D8an(o
Jo&mula&ios
En Bis%a D8an(oA
from equipos.forms import EquipoForm def crea_equipo(request): if request.method == 'POST': # peticion POST con formulario relleno form = EquipoForm(request.POST) if form.is_valid(): return HttpResponseRedirect('/gracias/') else: # formulario sin rellenar form = EquipoForm() return render_to_response('crea_equipo.html', {'form': form })
5;
In%&o$ucci'n a D8an(o
Jo&mula&ios
En .lan%illaA
{% extends "base.html" %} {% block contenido %} <form action="." method="POST"> {{ form.as_p }} <input type="submit" value="Guardar equipo" /> </form> {% endblock %}
5=
In%&o$ucci'n a D8an(o
Jo&mula&ios
from django import forms from django.forms.widgets import Textarea class ContactoForm(forms.Form): asunto = models.CharField() email = models.EmailField() edad = models.IntegerField(min_value=0) cuerpo = models.CharField(required=False, widget=Textarea())
5F
In%&o$ucci'n a D8an(o
O%&os com.onen%es
Mi$$le0a&es
Cam2io $e i$ioma se(Vn len(ua8e naBe(a$o& O/uscaci'n $e %o$a ocu&&encia $e emails http://docs.djangoproject.com/en/dev/topics/http/middleware/
Cac6
In%&o$ucci'n a D8an(o
O%&os com.onen%es
Au%en%icaci'nNau%o&iEaci'n
Con%ieneA
I1=N
In%&o$ucci'n a D8an(o
O%&os com.onen%es
Se&ialiEaci'n
Sis%ema $e %es%eo
6%%.ANN$ocs.$8an(o.&o8ec%.comNenN$eBN%o.icsN%es%in(N
9"
In%&o$ucci'n a D8an(o
6%%.ANN$ocs.$8an(o.&o8ec%.comNenN$eBN%o.icsN6%%.NsessionsN
6%%.ANN$ocs.$8an(o.&o8ec%.comNenN$eBN%o.icsNsi(nalsN
6%%.ANN$ocs.$8an(o.&o8ec%.comNenN$eBN&e/Ncon%&i2Na$minN
http://docs.djangoproject.com/en/dev/ref/contrib/syndication/
6%%.ANN$ocs.$8an(o.&o8ec%.comNenN$eBN&e/N(ene&icLBie0sN
#n$ice $e con%eni$os
1. ". 4. 5. 9. .. ;. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o -emo* desarrollo en -+ango D8an(o 2y e<am.le Re/le<iones /inales
95
DEMO
99
#n$ice $e con%eni$os
1. ". 4. 5. 9. :. /. =.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o -+ango b( e0ample Re/le<iones /inales
9:
D8an(o 2y e<am.le
Im.lemen%aci'n (ene&al A(&e(aci'n RSS E$i%o& inline Mi$$le0a&e Cac6C'$i(o D8an(o &esul%an%e Resul%a$o /inal
An*lisis
9;
D8an(o 2y e<am.le
P*(ina inicial
6%%.ANN000.yaco.esN
9=
D8an(o 2y e<am.le
Wi$a en Oaco
6%%.ANN000.yaco.esNnoso%&osNBi$aZenZyacoN
9F
D8an(o 2y e<am.le
Comuni$a$
6%%.ANN000.yaco.esNcommuni%yNac%uali$a$N
:I
#n$ice $e con%eni$os
1. ". 4. 5. 9. :. ;. 1.
In%&o$ucci'n a me%o$olo()as *(iles +,u- .e$i& a un /&ame0o&1 0e23 +Es !"EE *(il3 Py%6on7 e8em.lo $e len(ua(e *(il In%&o$ucci'n a D8an(o Demo7 $esa&&ollo en D8an(o D8an(o 2y e<am.le 2efle0iones finales
:1
Re/le<iones /inales
Re/le<iones /inales
+Es necesa&io &e.lan%ea&se el .&oceso $e $esa&&ollo $e a.licaciones 0e23 +!"EE es siem.&e una 2uena elecci'n .a&a el $esa&&ollo 0e23 +Son los en%o&nos come&ciales &ealmen%e %an .&o$uc%iBos como .&ome%en sus /a2&ican%es3 +Al(Vn $)a Be&emos el l)mi%e $e .osi2ili$a$es ?ue %&ae D8an(o3
:"
+Du$as3 +Su(e&encias3
:4