introducción a django/python

49
Introducción a 01

Upload: claudia-valdivieso-castillo

Post on 06-Apr-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 1/49

Introducción a

01

Page 2: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 2/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 3/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 4/49

Sintaxis de Python

Para denir bloques de código NO se utilizan llaves { ... } como en

otros lenguajes, los bloques de código se denen mediante indentación:

a = 2

if a + 3 == 5:

print a

01.

02.

03.

04

Page 5: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 5/49

Tipos de datos comunes

string (también con soporte Unicode)

int

oat

long (enteros largos)

complex (números complejos: parte real / parte imaginaria)

bool (booleanos)

le

•••

••••

05

Page 6: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 6/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 7/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 8/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 9/49

Leer un chero: Ejemplo

fichero = open("texto.txt")

for linea in fichero:

print linea

01.

02.

03.

09

Page 10: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 10/49

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 12: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 12/49

¿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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 13/49

¿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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 14/49

¿Qué hace Django?

Provee una estructura de trabajo bajo el patrón Model Template V iew

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 15/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 16/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 17/49

Estructura de un proyecto

proyecto/ 

aplicacion 1/ 

models.py

views.py

urls.py

templates/ 

aplicacion 2/ 

...

••

••••

••

17

Page 18: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 18/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 19/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 20/49

 Abrimos el navegador y...

20

Page 21: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 21/49

 Archivos del proyecto

__init__.py indica a Python que el directorio sea interpretado como un

paquete de Python

settings.py contiene la conguració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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 22/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 23/49

 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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 24/49

Models: modelos de datos

class Autor(models.Model):

nombre = models.CharField(max_length=150)

class Libro(models.Model):

autor = models.ForeignKey(Autor, related_name='li

titulo = models.CharField(max_length=150)

resumen = models.TextField(blank=True)

01.

02.

03.

04.

05.

06.

07.

24

Page 25: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 25/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 26/49

 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'

01.

02.

03.

26

Page 27: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 27/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 28/49

Page 29: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 29/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 30/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 31/49

¿Qué incluye Django?

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

31

Page 32: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 32/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 33/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 34/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 35/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 36/49

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)

Lenguaje de plantillas

••

36

Page 37: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 37/49

Lenguaje de plantillas

Es sencillo, orientado a diseñadores que no saben programar

Las plantillas pueden heredar unas de otras

Se denen bloques (blocks) que pueden rellenar las plantillas hijas

{{ variable }}

{% if .. . %} {% else %} {% endif %}

{% for .. . in .. . %} {% empty %} {% enfor %}

••••

••

37

Page 38: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 38/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 39/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 40/49

¿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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 41/49

Sistema de administración automático

41

Page 42: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 42/49

¿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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 43/49

Framework de formularios

Se denen 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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 44/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 45/49

 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'

01.

02.

03.

04.

05.

06.

07.

08.45

Page 46: Introducción a Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 46/49

¿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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 47/49

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 Django/Python

8/2/2019 Introducción a Django/Python

http://slidepdf.com/reader/full/introduccion-a-djangopython 48/49

Quién usa Django

Google en su AppEngine

Nasa

New York Times

Washington Post

 VMWare

••••

48