Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Python / Django

Betabeers
October 20, 2011
410

Introducción a Python / Django

Betabeers

October 20, 2011
Tweet

Transcript

  1. 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
  2. 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
  3. 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: a = 2 if a + 3 == 5: print a • 01. 02. 03. 04
  4. 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
  5. 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
  6. Condicionales: Ejemplo if a == b or c != 126:

    mensaje = "Dentro del if" print mensaje else: print "Dentro del else" print "Fuera" 01. 02. 03. 04. 05. 06. 07
  7. Bucles: Ejemplo lista = ["Ana", "Juan", "Marta"] for nombre in

    lista: print "Hola %s" % nombre Hola Ana Hola Juan Hola Marta 01. 02. 03. 08
  8. Funciones: Ejemplo def saludar(persona): if persona == "Miquel": print "¡Vaya

    pelo! ¿Cuál es tu secreto?" else: print "Hola %s" % persona 01. 02. 03. 04. 05. 10
  9. 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
  10. ¿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 metodología de trabajo. 12
  11. ¿Qué es Django? Django es un framework web de alto

    nivel escrito en Python que fomenta el desarrollo rápido y limpio y el diseño pragmático. Sigue el principio DRY: Don't Repeat Yourself 13
  12. ¿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
  13. 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
  14. 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
  15. Estructura de un proyecto proyecto/ aplicacion 1/ models.py views.py urls.py

    templates/ aplicacion 2/ ... • • • • • • • • 17
  16. Crear un proyecto Creamos nuestro proyecto y sus archivos iniciales

    con el comando: django-admin.py startproject mi_proyecto 18
  17. 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
  18. 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
  19. Crear una aplicación Dentro de la ruta de nuestro proyecto

    utilizamos manage.py para crear aplicaciones: python manage.py startapp biblioteca 22
  20. 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
  21. Models: modelos de datos class Autor(models.Model): nombre = models.CharField(max_length=150) class

    Libro(models.Model): autor = models.ForeignKey(Autor, related_name='libros') titulo = models.CharField(max_length=150) resumen = models.TextField(blank=True) 01. 02. 03. 04. 05. 06. 07. 24
  22. Crear la estructura SQL automáticamente 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
  23. Views: Vistas de la aplicación def autor_detail(request, id): autor =

    get_object_or_404(Autor, id=id) return render_to_response('autor.html', { 'autor':autor } 01. 02. 03. 26
  24. Templates: Plantilla HTML <html> <head><title>{{ autor.nombre }}</title></head> <body> {% for

    libro in autor.libros.all %} <h2>{{ libro.titulo }}</h2> <p>{{ libro.resumen }}</p> {% endfor %} </body> </html> 01. 02. 03. 04. 05. 06. 07. 08. 27
  25. Urls: URL para nuestra vista Utilizamos expresiones regulares para las

    URLs: urlpatterns = patterns('', # ... url(r'^autor/(?P<id>\d+)/$', autor_detail, name='autor'), ) 01. 02. 03. 04. 28
  26. Funcionamiento de las peticiones HTTP El usuario pide una URL

    (por GET ó POST) Django busca la primera URL que coincida con la solicitada (urls.py) Se ejecuta la vista (función) a la que apunta esa URL (views.py) En la vista se utilizan los models (modelos de datos) para consultar la BD Los datos resultantes se introducen en la plantilla (templates) Se devuleve una respuesta HTTP con el HTML generado 1. 2. 3. 4. 5. 6. 29
  27. Con nuestro ejemplo El navegador solicita la URL http://www.miweb.com/autor/33/ Django

    busca una coincidencia en urls.py ^autor/(?P<id>\d+)/$ coincide con /autor/33/ Se ejecuta la vista a la que apunta esa URL: autor_detail(id=33) En la vista se consulta a la BD para obtener el Autor con id 33 La vista pasa el objeto Autor devuelto a la plantilla autor.html Django procesa la plantilla y devuleve el HTML generado al navegador 1. 2. 3. 4. 5. 6. 30
  28. 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
  29. Probando el ORM # crear un autor cervantes = Autor.objects.create(nombre='Cervantes')

    # crear un libro del autor Libro.objects.create(titulo='Don Quijote', resumen='bla bla', autor=cervantes) 01. 02. 03. 04. 05. 06. 07. 33
  30. Probando el ORM 2 # obtener todos los autores Autor.objects.all()

    # obtener libros cuyo título empieza por "Don" Libro.objects.filter(titulo__startswith='Don') 01. 02. 03. 04. 05. 34
  31. Probando el ORM 3 # obtener los libros de Cervantes

    ordenados A-Z autor = Autor.objects.get(nombre='Cervantes') libros = autor.libros.order_by('titulo') # eliminar el autor autor.delete() 01. 02. 03. 04. 05. 06. 35
  32. ¿Qué incluye Django? ORM (mapeador de objetos con la base

    de datos) Lenguaje de plantillas • • 36
  33. 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
  34. Plantilla base.html <html> <head> <title>{% block title %}{% endblock %}</title>

    </head> <body> {% block content %}{% endblock %} </body> </html> 01. 02. 03. 04. 05. 06. 07. 08. 38
  35. Plantilla hija.html {% extends "base.html" %} {% block title %}Mi

    sección{% endblock %} {% block content %} <p> El contenido </p> {% endblock %} 01. 02. 03. 04. 05. 06. 07. 39
  36. ¿Qué incluye Django? ORM (mapeador de objetos con la base

    de datos) Lenguaje de plantillas Sistema de administración automático • • • 40
  37. ¿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
  38. 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
  39. Forms y ModelForms class ContactForm(forms.Form): email = forms.EmailField(label='E-mail') message =

    forms.CharField(widget=forms.Textarea) class LibroForm(forms.ModelForm): class Meta: model = Libro 01. 02. 03. 04. 05. 06. 07. 44
  40. Vista con validación de formulario def contacto(request): if request.method ==

    'POST': form = ContactForm(request.POST) if form.is_valid(): return HttpResponseRedirect('/gracias/') else: form = ContactForm() return render_to_response('contacto.html', {'form':form }) 01. 02. 03. 04. 05. 06. 07. 08. 45
  41. ¿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
  42. 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
  43. Quién usa Django Google en su AppEngine Nasa New York

    Times Washington Post VMWare • • • • • 48
  44. 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