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 [Link] ^ 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("[Link]") 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 [Link] [Link]/tutorial/ ^ Dive into Python [Link] ^ Python para todos [Link]/tutorial-python/ ^ Lista de correo [Link]/mailman/listinfo/python-es ^ Reuniones Python-Madrid [Link] ^
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 ([Link]) View vistas de datos ([Link]): 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/
[Link] [Link] [Link] templates/ ...
aplicacion 2/
17
Crear un proyecto
Creamos nuestro proyecto y sus archivos iniciales con el comando: [Link] startproject mi_proyecto
18
Ejecutar el servidor de desarrollo
Desde la ruta de nuestro proyecto ejecutamos el servidor de desarrollo con el comando: python [Link] runserver Abrimos [Link]
19
Abrimos el navegador y...
20
Archivos del proyecto
__init__.py indica a Python que el directorio sea interpretado como un paquete de Python [Link] contiene la configuracin de la aplicacin (conex. a bases de datos, aplicaciones instaladas, etc.) [Link] nos permite ejecutar comandos de django sobre el proyecto (p ej. para crear nuevas aplicaciones) [Link] contiene las URLs del proyecto 21
Crear una aplicacin
Dentro de la ruta de nuestro proyecto utilizamos [Link] para crear aplicaciones: python [Link] startapp biblioteca
22
Archivos de la aplicacin
__init__.py [Link] contiene nuestros modelos de datos [Link] contiene las vistas de la aplicacin [Link] permite que incluyamos tests para la aplicacin Es usual aadir un [Link] con las URLs de nuestra aplicacin e importarlas en el [Link] del proyecto
23
Models: modelos de datos
01. class Autor([Link]): 02. 03. 04. class Libro([Link]): 05. 06. 07. 24 autor = [Link](Autor, related_name='libros') titulo = [Link](max_length=150) resumen = [Link](blank=True) nombre = [Link](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 [Link] 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('[Link]', { 'autor':autor }
26
Templates: Plantilla HTML
01. <html> 02. 03. 04. 05. 06. 07. 08. 27 <head><title>{{ [Link] }}</title></head> <body> {% for libro in [Link] %} <h2>{{ [Link] }}</h2> <p>{{ [Link] }}</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 ([Link]) 3. Se ejecuta la vista (funcin) a la que apunta esa URL ([Link]) 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 [Link] 2. Django busca una coincidencia en [Link] ^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 [Link] 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 = [Link](nombre='Cervantes') 03. 04. # crear un libro del autor 05. [Link](titulo='Don Quijote', 06. 07. 33 resumen='bla bla', autor=cervantes)
Probando el ORM 2
01. # obtener todos los autores 02. [Link]() 03. 04. # obtener libros cuyo ttulo empieza por "Don" 05. [Link](titulo__startswith='Don')
34
Probando el ORM 3
01. # obtener los libros de Cervantes ordenados A-Z 02. autor = [Link](nombre='Cervantes') 03. libros = [Link].order_by('titulo') 04. 05. # eliminar el autor 06. [Link]()
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 [Link]
01. <html> 02. 03. 04. 05. 06. 07. <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body>
08. </html> 38
Plantilla [Link]
01. {% extends "[Link]" %} 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([Link]): 02. 03. 04. 05. class LibroForm([Link]): 06. 07. 44 class Meta: model = Libro email = [Link](label='E-mail') message = [Link](widget=[Link])
Vista con validacin de formulario
01. def contacto(request): 02. 03. 04. 05. 06. 07. 08. 45 else: form = ContactForm() if [Link] == 'POST': form = ContactForm([Link]) if form.is_valid(): return HttpResponseRedirect('/gracias/')
return render_to_response('[Link]', {'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 [Link]/en/dev/intro/tutorial01/ ^ Django book [Link] ^ Django docs [Link] ^ Blog de [Link] [Link]/blog/ ^ Lista de correo [Link]/group/django-users ^ Lista de correo espaol [Link]/group/django-es ^
49