Introducción a Python / Django

1,603 views

Published on

  • Be the first to comment

Introducción a Python / Django

  1. 1. Introducción a01
  2. 2. Conozcamos Python• Python es un lenguaje de script de código 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 intérprete escribimos python en la consola y aparecerá un promt así >>> para introducir comandos• Los archivos de código python tienen extensión .py 02
  3. 3. Conozcamos Python 2• Para ejecutar nuestros scripts usamos python mi_script.py• Al ejecutar un script se traduce a un código máquina intermedio generando archivos .pyc ó .pyo• Python es fuertemente tipado pero tiene tipos dinámicos: Una variable puede cambiar de tipo en ejecución pero el tipo se tiene en cuenta para las operaciones• No hace falta declarar variables, es automático al utilizarlas 03
  4. 4. Sintaxis de Python • Para definir bloques de código NO se utilizan llaves { ... } como en otros lenguajes, los bloques de código se definen mediante indentación:01. a = 202. if a + 3 == 5:03. print a 04
  5. 5. Tipos de datos comunes• string (también con soporte Unicode)• int• float• long (enteros largos)• complex (números complejos: parte real / parte imaginaria)• bool (booleanos)• file 05
  6. 6. 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
  7. 7. Condicionales: Ejemplo01. if a == b or c != 126:02. mensaje = "Dentro del if"03. print mensaje04. else:05. print "Dentro del else"06. print "Fuera" 07
  8. 8. Bucles: Ejemplo01. lista = ["Ana", "Juan", "Marta"]02. for nombre in lista:03. print "Hola %s" % nombre Hola Ana Hola Juan Hola Marta 08
  9. 9. Leer un fichero: Ejemplo01. fichero = open("texto.txt")02. for linea in fichero:03. print linea 09
  10. 10. Funciones: Ejemplo01. def saludar(persona):02. if persona == "Miquel":03. print "¡Vaya pelo! ¿Cuál es tu secreto?"04. else:05. print "Hola %s" % persona 10
  11. 11. 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
  12. 12. ¿Qué es un framework?Un framework es un paquete de software que sirve de base para otrosproyectos de software. Provee una estructura y una metodología detrabajo.12
  13. 13. ¿Qué es Django?Django es un framework web de alto nivel escrito en Python quefomenta el desarrollo rápido y limpio y el diseño pragmático.Sigue el principio DRY: Dont Repeat Yourself13
  14. 14. ¿Qué hace Django?• Provee una estructura de trabajo bajo el patrón Model Template View• Mapea objetos Python con la base de datos (ORM)• Permite diseñar URLs amigables para buscadores (útil para SEO)• Sistema de plantillas sencillo para diseñadores• Genera una interfaz de administración automática• Puede gestionar formularios, sesiones de usuario, autenticación, caché, almacenamiento, sitemaps, internacionalización, etc. 14
  15. 15. Patrón MTV Separamos datos, interfaz de usuario y lógica de control:• Model → modelo de datos (models.py)• View →vistas de datos (views.py): qué datos se presentan• Template → plantillas de páginas (generalmente archivos HTML): cómo se presentan los datos 15
  16. 16. Organización de un proyecto Django• Un desarrollo es un Proyecto• Un proyecto consta de una o varias aplicaciones• Cada aplicación hace algo en concreto• Proyecto "Comunidad web" Aplicaciones: blog, foro, registro de usuarios, tienda on-line, newsletter, agregador de feeds...• Una aplicación puede ser utilizada por distintos proyectos a la vez• Un proyecto puede hacer funcionar varios sitios web 16
  17. 17. Estructura de un proyecto• proyecto/ • aplicacion 1/ • models.py • views.py • urls.py • templates/ • aplicacion 2/ 17 • ...
  18. 18. Crear un proyectoCreamos nuestro proyecto y sus archivos iniciales con el comando:django-admin.py startproject mi_proyecto18
  19. 19. Ejecutar el servidor de desarrolloDesde la ruta de nuestro proyecto ejecutamos el servidor de desarrollocon el comando:python manage.py runserverAbrimos http://127.0.0.1:8000/19
  20. 20. Abrimos el navegador y...20
  21. 21. Archivos del proyecto• __init__.py indica a Python que el directorio sea interpretado como un paquete de Python• settings.py contiene la configuración de la aplicación (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
  22. 22. Crear una aplicaciónDentro de la ruta de nuestro proyecto utilizamos manage.py para crearaplicaciones:python manage.py startapp biblioteca22
  23. 23. Archivos de la aplicación• __init__.py• models.py contiene nuestros modelos de datos• views.py contiene las vistas de la aplicación• tests.py permite que incluyamos tests para la aplicación• Es usual añadir un urls.py con las URLs de nuestra aplicación e importarlas en el urls.py del proyecto 23
  24. 24. Models: modelos de datos01. class Autor(models.Model):02. nombre = models.CharField(max_length=150)03.04. class Libro(models.Model):05. autor = models.ForeignKey(Autor, related_name=libros)06. titulo = models.CharField(max_length=150)07. resumen = models.TextField(blank=True) 24
  25. 25. Crear la estructura SQL automáticamenteCon un comando creamos toda la estructura de la base de datos a partirde nuestros modelos:python manage.py syncdbDjango soporta por defecto MySQL, PostgreSQL, SQLite3, y Oracle.25
  26. 26. Views: Vistas de la aplicación01. def autor_detail(request, id):02. autor = get_object_or_404(Autor, id=id)03. return render_to_response(autor.html, { autor:autor } 26
  27. 27. Templates: Plantilla HTML01. <html>02. <head><title>{{ autor.nombre }}</title></head>03. <body>04. {% for libro in autor.libros.all %}05. <h2>{{ libro.titulo }}</h2>06. <p>{{ libro.resumen }}</p>07. {% endfor %}08. </body> </html> 27
  28. 28. Urls: URL para nuestra vista Utilizamos expresiones regulares para las URLs:01. urlpatterns = patterns(,02. # ...03. url(r^autor/(?P<id>d+)/$, autor_detail, name=autor),04. ) 28
  29. 29. Funcionamiento de las peticiones HTTP1. 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 (función) a la que apunta esa URL (views.py)4. En la vista se utilizan los models (modelos de datos) para consultar la BD5. Los datos resultantes se introducen en la plantilla (templates)6. Se devuleve una respuesta HTTP con el HTML generado 29
  30. 30. Con nuestro ejemplo1. 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 335. La vista pasa el objeto Autor devuelto a la plantilla autor.html6. Django procesa la plantilla y devuleve el HTML generado al navegador 30
  31. 31. ¿Qué incluye Django?• ORM (mapeador de objetos con la base de datos) 31
  32. 32. ORM de Django• ORM: Mapeador de objetos relacional• Nos permite consultar la base de datos de forma sencilla a través de nuestros modelos en Python• Es sencillo y pontente• Permite ejecutar código SQL directamente para operaciones especialmente complejas• Django permite utilizar otro ORM distinto como SQLAlchemy 32
  33. 33. Probando el ORM01. # crear un autor02. cervantes = Autor.objects.create(nombre=Cervantes)03.04. # crear un libro del autor05. Libro.objects.create(titulo=Don Quijote,06. resumen=bla bla,07. autor=cervantes) 33
  34. 34. Probando el ORM 201. # obtener todos los autores02. Autor.objects.all()03.04. # obtener libros cuyo título empieza por "Don"05. Libro.objects.filter(titulo__startswith=Don) 34
  35. 35. Probando el ORM 301. # obtener los libros de Cervantes ordenados A-Z02. autor = Autor.objects.get(nombre=Cervantes)03. libros = autor.libros.order_by(titulo)04.05. # eliminar el autor06. autor.delete() 35
  36. 36. ¿Qué incluye Django?• ORM (mapeador de objetos con la base de datos)• Lenguaje de plantillas 36
  37. 37. Lenguaje de plantillas• Es sencillo, orientado a diseñadores 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
  38. 38. Plantilla base.html01. <html>02. <head>03. <title>{% block title %}{% endblock %}</title>04. </head>05. <body>06. {% block content %}{% endblock %}07. </body>08. </html> 38
  39. 39. Plantilla hija.html01. {% extends "base.html" %}02.03. {% block title %}Mi sección{% endblock %}04.05. {% block content %}06. <p> El contenido </p>07. {% endblock %} 39
  40. 40. ¿Qué incluye Django?• ORM (mapeador de objetos con la base de datos)• Lenguaje de plantillas• Sistema de administración automático 40
  41. 41. Sistema de administración automático41
  42. 42. ¿Qué incluye Django?• ORM (mapeador de objetos con la base de datos)• Lenguaje de plantillas• Sistema de administración automático• Framework de formularios 42
  43. 43. Framework de formularios• Se definen con clases de Python. Notación similar a los models• Formularios generados dinámicamente a partir de nuestros modelos• Django realiza la validación en función del tipo de dato• Protección contra CSRF automática (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
  44. 44. Forms y ModelForms01. class ContactForm(forms.Form):02. email = forms.EmailField(label=E-mail)03. message = forms.CharField(widget=forms.Textarea)04.05. class LibroForm(forms.ModelForm):06. class Meta:07. model = Libro 44
  45. 45. Vista con validación de formulario01. def contacto(request):02. if request.method == POST:03. form = ContactForm(request.POST)04. if form.is_valid():05. return HttpResponseRedirect(/gracias/)06. else:07. form = ContactForm()08. return render_to_response(contacto.html, {form:form }) 45
  46. 46. ¿Qué incluye Django?• ORM (mapeador de objetos con la base de datos)• Lenguaje de plantillas• Sistema de administración automático• Framework de formularios• Otros componentes de Django 46
  47. 47. Otros componentes de Django• Vistas genéricas: CRUD, listados con paginación, etc.• Autenticación y sesiones de usuario• Internacionalización y localización• Sistemas de cache (memcached, etc.)• Backends de almacenamiento de datos• Generación de sitemaps• Generación de feeds 47
  48. 48. Quién usa Django• Google en su AppEngine• Nasa• New York Times• Washington Post• VMWare 48
  49. 49. 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 español groups.google.com/group/django-es ^ 49

×