introducción a python / django

Post on 15-Jan-2015

1.184 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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.

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

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

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

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

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

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

Bucles: Ejemplo

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

for nombre in lista:

print "Hola %s" % nombre

Hola Ana

Hola Juan

Hola Marta

01.

02.

03.

08

Leer un fichero: Ejemplo

fichero = open("texto.txt")

for linea in fichero:

print linea

01.

02.

03.

09

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

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

¿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

¿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

¿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

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

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

Estructura de un proyecto

proyecto/

aplicacion 1/

models.py

views.py

urls.py

templates/

aplicacion 2/

...

••

••••

••

17

Crear un proyecto

Creamos nuestro proyecto y sus archivos iniciales con el comando:

django-admin.py startproject mi_proyecto

18

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

Abrimos el navegador y...

20

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

Crear una aplicación

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

aplicaciones:

python manage.py startapp biblioteca

22

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

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

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

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

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

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

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

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

¿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 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

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

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

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

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)

Lenguaje de plantillas••

36

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

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

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

¿Qué incluye Django?

ORM (mapeador de objetos con la base de datos)

Lenguaje de plantillas

Sistema de administración automático

•••

40

Sistema de administración automático

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

••••

42

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

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

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

¿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

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

Quién usa Django

Google en su AppEngine

Nasa

New York Times

Washington Post

VMWare

•••••

48

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

top related