Está en la página 1de 49

Introduccin a

01

Conozcamos Python
Python es un lenguaje de script de cdigo abierto y multiplataforma No necesitamos compilar nuestros programas Se puede descargar desde python.org ^ Mac OS X y Linux suelen venir con Python preinstalado Para utilizar el intrprete escribimos python en la consola y aparecer un promt as >>> para introducir comandos Los archivos de cdigo python tienen extensin .py 02

Conozcamos Python 2
Para ejecutar nuestros scripts usamos python mi_script.py Al ejecutar un script se traduce a un cdigo mquina intermedio generando archivos .pyc .pyo Python es fuertemente tipado pero tiene tipos dinmicos: Una variable puede cambiar de tipo en ejecucin pero el tipo se tiene en cuenta para las operaciones No hace falta declarar variables, es automtico al utilizarlas 03

Sintaxis de Python
Para definir bloques de cdigo NO se utilizan llaves { ... } como en otros lenguajes, los bloques de cdigo se definen mediante indentacin: 01. a = 2 02. if a + 3 == 5: 03. print a

04

Tipos de datos comunes


string (tambin con soporte Unicode) int float long (enteros largos) complex (nmeros complejos: parte real / parte imaginaria) bool (booleanos) file 05

Colecciones de datos
Listas [1, 2, 3, "Hola"] Tuplas Inmutables: (1, 2, 3, "Hola") Diccionarios Clave-valor: { "nombre":"Pedro", "edad":23 } Sets (colecciones de elementos nicos), etc. 06

Condicionales: Ejemplo
01. if a == b or c != 126: 02. 03. 05. mensaje = "Dentro del if" print mensaje print "Dentro del else"

04. else: 06. print "Fuera"

07

Bucles: Ejemplo
01. lista = ["Ana", "Juan", "Marta"] 02. for nombre in lista: 03. print "Hola %s" % nombre Hola Ana Hola Juan Hola Marta 08

Leer un fichero: Ejemplo


01. fichero = open("texto.txt") 02. for linea in fichero: 03. print linea

09

Funciones: Ejemplo
01. def saludar(persona): 02. 03. 04. 05. if persona == "Miquel": print "Vaya pelo! Cul es tu secreto?" else: print "Hola %s" % persona

10

Aprender Python
Tutorial python.org docs.python.org/tutorial/ ^ Dive into Python diveintopython.org ^ Python para todos mundogeek.net/tutorial-python/ ^ Lista de correo mail.python.org/mailman/listinfo/python-es ^ Reuniones Python-Madrid python-madrid.es ^

11

Qu es un framework?
Un framework es un paquete de software que sirve de base para otros proyectos de software. Provee una estructura y una metodologa de trabajo.

12

Qu es Django?
Django es un framework web de alto nivel escrito en Python que fomenta el desarrollo rpido y limpio y el diseo pragmtico. Sigue el principio DRY: Don't Repeat Yourself

13

Qu hace Django?
Provee una estructura de trabajo bajo el patrn Model Template View Mapea objetos Python con la base de datos (ORM) Permite disear URLs amigables para buscadores (til para SEO) Sistema de plantillas sencillo para diseadores Genera una interfaz de administracin automtica Puede gestionar formularios, sesiones de usuario, autenticacin, cach, almacenamiento, sitemaps, internacionalizacin, etc. 14

Patrn MTV
Separamos datos, interfaz de usuario y lgica de control:

Model modelo de datos (models.py) View vistas de datos (views.py): qu datos se presentan Template plantillas de pginas (generalmente archivos HTML): cmo se presentan los datos

15

Organizacin de un proyecto Django


Un desarrollo es un Proyecto Un proyecto consta de una o varias aplicaciones Cada aplicacin hace algo en concreto Proyecto "Comunidad web" Aplicaciones: blog, foro, registro de usuarios, tienda on-line, newsletter, agregador de feeds... Una aplicacin puede ser utilizada por distintos proyectos a la vez Un proyecto puede hacer funcionar varios sitios web 16

Estructura de un proyecto
proyecto/

aplicacion 1/

models.py views.py urls.py templates/ ...

aplicacion 2/

17

Crear un proyecto
Creamos nuestro proyecto y sus archivos iniciales con el comando: django-admin.py startproject mi_proyecto

18

Ejecutar el servidor de desarrollo


Desde la ruta de nuestro proyecto ejecutamos el servidor de desarrollo con el comando: python manage.py runserver Abrimos http://127.0.0.1:8000/

19

Abrimos el navegador y...

20

Archivos del proyecto


__init__.py indica a Python que el directorio sea interpretado como un paquete de Python settings.py contiene la configuracin de la aplicacin (conex. a bases de datos, aplicaciones instaladas, etc.) manage.py nos permite ejecutar comandos de django sobre el proyecto (p ej. para crear nuevas aplicaciones) urls.py contiene las URLs del proyecto 21

Crear una aplicacin


Dentro de la ruta de nuestro proyecto utilizamos manage.py para crear aplicaciones: python manage.py startapp biblioteca

22

Archivos de la aplicacin
__init__.py models.py contiene nuestros modelos de datos views.py contiene las vistas de la aplicacin tests.py permite que incluyamos tests para la aplicacin Es usual aadir un urls.py con las URLs de nuestra aplicacin e importarlas en el urls.py del proyecto

23

Models: modelos de datos


01. class Autor(models.Model): 02. 03. 04. class Libro(models.Model): 05. 06. 07. 24 autor = models.ForeignKey(Autor, related_name='libros') titulo = models.CharField(max_length=150) resumen = models.TextField(blank=True) nombre = models.CharField(max_length=150)

Crear la estructura SQL automticamente


Con un comando creamos toda la estructura de la base de datos a partir de nuestros modelos: python manage.py syncdb Django soporta por defecto MySQL, PostgreSQL, SQLite3, y Oracle.

25

Views: Vistas de la aplicacin


01. def autor_detail(request, id): 02. 03. autor = get_object_or_404(Autor, id=id)

return render_to_response('autor.html', { 'autor':autor }

26

Templates: Plantilla HTML


01. <html> 02. 03. 04. 05. 06. 07. 08. 27 <head><title>{{ autor.nombre }}</title></head> <body> {% for libro in autor.libros.all %} <h2>{{ libro.titulo }}</h2> <p>{{ libro.resumen }}</p> {% endfor %} </body> </html>

Urls: URL para nuestra vista


Utilizamos expresiones regulares para las URLs: 01. urlpatterns = patterns('', 02. 03. 04. ) # ...

url(r'^autor/(?P<id>\d+)/$', autor_detail, name='autor'),

28

Funcionamiento de las peticiones HTTP


1. El usuario pide una URL (por GET POST) 2. Django busca la primera URL que coincida con la solicitada (urls.py) 3. Se ejecuta la vista (funcin) a la que apunta esa URL (views.py) 4. En la vista se utilizan los models (modelos de datos) para consultar la BD 5. Los datos resultantes se introducen en la plantilla (templates) 6. Se devuleve una respuesta HTTP con el HTML generado

29

Con nuestro ejemplo


1. El navegador solicita la URL http://www.miweb.com/autor/33/ 2. Django busca una coincidencia en urls.py ^autor/(?P<id>\d+)/$ coincide con /autor/33/ 3. Se ejecuta la vista a la que apunta esa URL: autor_detail(id=33) 4. En la vista se consulta a la BD para obtener el Autor con id 33 5. La vista pasa el objeto Autor devuelto a la plantilla autor.html 6. Django procesa la plantilla y devuleve el HTML generado al navegador 30

Qu incluye Django?
ORM (mapeador de objetos con la base de datos)

31

ORM de Django
ORM: Mapeador de objetos relacional Nos permite consultar la base de datos de forma sencilla a travs de nuestros modelos en Python Es sencillo y pontente Permite ejecutar cdigo SQL directamente para operaciones especialmente complejas Django permite utilizar otro ORM distinto como SQLAlchemy 32

Probando el ORM
01. # crear un autor 02. cervantes = Autor.objects.create(nombre='Cervantes') 03. 04. # crear un libro del autor 05. Libro.objects.create(titulo='Don Quijote', 06. 07. 33 resumen='bla bla', autor=cervantes)

Probando el ORM 2
01. # obtener todos los autores 02. Autor.objects.all() 03. 04. # obtener libros cuyo ttulo empieza por "Don" 05. Libro.objects.filter(titulo__startswith='Don')

34

Probando el ORM 3
01. # obtener los libros de Cervantes ordenados A-Z 02. autor = Autor.objects.get(nombre='Cervantes') 03. libros = autor.libros.order_by('titulo') 04. 05. # eliminar el autor 06. autor.delete()

35

Qu incluye Django?
ORM (mapeador de objetos con la base de datos) Lenguaje de plantillas

36

Lenguaje de plantillas
Es sencillo, orientado a diseadores que no saben programar Las plantillas pueden heredar unas de otras Se definen bloques (blocks) que pueden rellenar las plantillas hijas {{ variable }} {% if ... %} {% else %} {% endif %} {% for ... in ... %} {% empty %} {% enfor %}

37

Plantilla base.html
01. <html> 02. 03. 04. 05. 06. 07. <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body>

08. </html> 38

Plantilla hija.html
01. {% extends "base.html" %} 02. 03. {% block title %}Mi seccin{% endblock %} 04. 05. {% block content %} 06. <p> El contenido </p> 07. {% endblock %} 39

Qu incluye Django?
ORM (mapeador de objetos con la base de datos) Lenguaje de plantillas Sistema de administracin automtico

40

Sistema de administracin automtico

41

Qu incluye Django?
ORM (mapeador de objetos con la base de datos) Lenguaje de plantillas Sistema de administracin automtico Framework de formularios

42

Framework de formularios
Se definen con clases de Python. Notacin similar a los models Formularios generados dinmicamente a partir de nuestros modelos Django realiza la validacin en funcin del tipo de dato Proteccin contra CSRF automtica (Cross-site request forgery) Se pueden crear form wizards, formularios por pasos Se utilizan widgets para representar los campos: input, textarea, etc. o widgets complejos con HTML y javascript 43

Forms y ModelForms
01. class ContactForm(forms.Form): 02. 03. 04. 05. class LibroForm(forms.ModelForm): 06. 07. 44 class Meta: model = Libro email = forms.EmailField(label='E-mail') message = forms.CharField(widget=forms.Textarea)

Vista con validacin de formulario


01. def contacto(request): 02. 03. 04. 05. 06. 07. 08. 45 else: form = ContactForm() if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): return HttpResponseRedirect('/gracias/')

return render_to_response('contacto.html', {'form':form })

Qu incluye Django?
ORM (mapeador de objetos con la base de datos) Lenguaje de plantillas Sistema de administracin automtico Framework de formularios Otros componentes de Django

46

Otros componentes de Django


Vistas genricas: CRUD, listados con paginacin, etc. Autenticacin y sesiones de usuario Internacionalizacin y localizacin Sistemas de cache (memcached, etc.) Backends de almacenamiento de datos Generacin de sitemaps Generacin de feeds 47

Quin usa Django


Google en su AppEngine Nasa New York Times Washington Post VMWare

48

Aprender Django
Tutorial oficial docs.djangoproject.com/en/dev/intro/tutorial01/ ^ Django book djangobook.com ^ Django docs docs.djangoproject.com ^ Blog de django.es django.es/blog/ ^ Lista de correo groups.google.com/group/django-users ^ Lista de correo espaol groups.google.com/group/django-es ^

49