introducción a python / django

49
Introducción a 01

Upload: betabeers

Post on 15-Jan-2015

1.184 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introducción a Python / Django

Introducción a

01

www.princexml.com
Prince - Non-commercial License
This document was created with Prince, a great way of getting web content onto paper.
Page 2: Introducción a Python / Django

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

Page 3: Introducción a Python / Django

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

Page 4: Introducción a Python / Django

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

Page 5: Introducción a Python / Django

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

Page 6: Introducción a Python / Django

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

Page 7: Introducción a Python / Django

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

Page 8: Introducción a Python / Django

Bucles: Ejemplo

lista = ["Ana", "Juan", "Marta"]

for nombre in lista:

print "Hola %s" % nombre

Hola Ana

Hola Juan

Hola Marta

01.

02.

03.

08

Page 9: Introducción a Python / Django

Leer un fichero: Ejemplo

fichero = open("texto.txt")

for linea in fichero:

print linea

01.

02.

03.

09

Page 10: Introducción a Python / Django

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

Page 11: Introducción a Python / Django

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

Page 12: Introducción a Python / Django

¿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

Page 13: Introducción a Python / Django

¿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

Page 14: Introducción a Python / Django

¿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

Page 15: Introducción a Python / Django

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

Page 16: Introducción a Python / Django

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

Page 17: Introducción a Python / Django

Estructura de un proyecto

proyecto/

aplicacion 1/

models.py

views.py

urls.py

templates/

aplicacion 2/

...

••

••••

••

17

Page 18: Introducción a Python / Django

Crear un proyecto

Creamos nuestro proyecto y sus archivos iniciales con el comando:

django-admin.py startproject mi_proyecto

18

Page 19: Introducción a Python / Django

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

Page 20: Introducción a Python / Django

Abrimos el navegador y...

20

Page 21: Introducción a Python / Django

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

Page 22: Introducción a Python / Django

Crear una aplicación

Dentro de la ruta de nuestro proyecto utilizamos manage.py para crear

aplicaciones:

python manage.py startapp biblioteca

22

Page 23: Introducción a Python / Django

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

Page 24: Introducción a Python / Django

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

Page 25: Introducción a Python / Django

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

Page 26: Introducción a Python / Django

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

Page 27: Introducción a Python / Django

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

Page 28: Introducción a Python / Django

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

Page 29: Introducción a Python / Django

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

Page 30: Introducción a Python / Django

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

Page 31: Introducción a Python / Django

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)•

31

Page 32: Introducción a Python / Django

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

Page 33: Introducción a Python / Django

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

Page 34: Introducción a Python / Django

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

Page 35: Introducción a Python / Django

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

Page 36: Introducción a Python / Django

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)

Lenguaje de plantillas••

36

Page 37: Introducción a Python / Django

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

Page 38: Introducción a Python / Django

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

Page 39: Introducción a Python / Django

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

Page 40: Introducción a Python / Django

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)

Lenguaje de plantillas

Sistema de administración automático

•••

40

Page 41: Introducción a Python / Django

Sistema de administración automático

41

Page 42: Introducción a Python / Django

¿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

Page 43: Introducción a Python / Django

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

Page 44: Introducción a Python / Django

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

Page 45: Introducción a Python / Django

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

Page 46: Introducción a Python / Django

¿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

Page 47: Introducción a Python / Django

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

Page 48: Introducción a Python / Django

Quién usa Django

Google en su AppEngine

Nasa

New York Times

Washington Post

VMWare

•••••

48

Page 49: Introducción a Python / Django

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