introducción a django/python
TRANSCRIPT
8/2/2019 Introducción a Django/Python
http://slidepdf.com/reader/full/introduccion-a-djangopython 1/49
Introducción a
01
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
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
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
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
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
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
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
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
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
8/2/2019 Introducción a Django/Python
http://slidepdf.com/reader/full/introduccion-a-djangopython 11/49
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
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
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
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
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
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
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
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
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
8/2/2019 Introducción a Django/Python
http://slidepdf.com/reader/full/introduccion-a-djangopython 20/49
Abrimos el navegador y...
20
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
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
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
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
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
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
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
8/2/2019 Introducción a Django/Python
http://slidepdf.com/reader/full/introduccion-a-djangopython 28/49
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
8/2/2019 Introducción a Django/Python
http://slidepdf.com/reader/full/introduccion-a-djangopython 49/49
Aprender Django
Tutorial ocial 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