Está en la página 1de 26

Django

Aplicaciones Web dinmicas con Python


Alejandro Santos
alejolp@alejolp.com.ar // www.alejolp.com.ar
Versin en vivo del sitio en:
http://django.alejolp.com.ar/

Python

Django est hecho en Python.


Lenguaje de programacin de alto nivel,
orientado a objetos e interpretado.
Software libre y de cdigo abierto.
Propsito general: se puede usar para
programar diferentes tipos de
aplicaciones.

Django

Framework para realizar aplicaciones Web


dinmicas.

Software Libre bajo la licencia BSD.

La idea es respetar el patrn MVC.

En Django se llama patrn MTV: Model,


Template, View.

Creado inicialmente para hacer portales


de noticias.

Django

Django funciona donde funcione Python

Windows, Linux, BSD, Solaris, MacOS

Qu necesito para usar Django?

Python

Instalar las librerias de Django

Servidor Web y de Base de Datos

Django

Python

http://www.python.org

Django

http://www.djangoproject.com/

Bateras ya incluidas

Ya viene integrado en Django:

Panel de administracin con ABM de tablas


configurable.

Sistema de sesiones, usuarios, grupos y


permisos.

ORM: Abstraccin de la base de datos.

URLs elegantes.

I18N para sitios webs en varios idiomas.

Sistema de cach para acelerar la E/S.

Bateras ya incluidas

Tambin:

django-admin.py

runserver, shell, sql, syncdb

Creacin automtica de formularios a partir


de modelos

Comentarios

Seales (signals)

Sitios

varios portales que compartes una BD

Django

Aplicacin de Django esta compuesta de


aplicaciones.
Un proyecto tiene:

Opciones globales de configuracin

Mapeo de URLs

Una aplicacin tiene:

Modelos, Vistas, opciones de administracin.

Django

Crear un nuevo proyecto:

Editar settings.py con la info de la BD

django-admin starproject na
sqlite3, mysql, psql, oracle

Crear una nueva app dentro del proy:

cd na; ./manage startapp shop

Django

Agregar la app a INSTALLED_APPS

Crear los modelos

na.shop
editar el archivo na/shop/models.py

Sincronizar la BD:

./manage syncdb

Modelos

Abstraccin de la base de datos


Crear una clase Python que herede de
Model.
Definir las variables de inst. de la clase

Van a ser los campos de las tablas

manage.py sql

manage.py syncdb

Modelos
class Producto(models.Model):
nombre = models.CharField(max_length=250)
publicado = models.DateTimeField(auto_now_add=True)
descripcion = models.TextField()
categorias = models.ManyToManyField(Categoria)
stock = models.IntegerField(default=0)
precio = models.IntegerField(default=0)
def __unicode__(self):
return self.nombre

Modelos
>>> p = Producto(nombre="Canoa QSL")
>>> p
<Producto: Canoa QSL>
>>> p.descripcion = "La mejor canoa!"
>>> p
<Producto: Canoa QSL>
>>> p.stock = 1
>>> p.precio = 10000
>>> p.save()
>>> p.categorias.all()
[]
>>> p.categorias.add(Categoria.objects.get(pk=1))
>>> p.save()
>>> p.categorias.all()
[<Categoria: Canoas Deportivas>]

Modelos
demo
mostrar sqlite

Admin

El panel de Administracin es una


aplicacin adicional

Hay que agregar la aplicacion


django.contrib.admin a INSTALLED_APPS

Hace falta activar la URL en na/urls.py

Hace falta agregar las clases de modelo en


na/shop/admin.py

admin.site.register(Producto)

Admin

Personalizable

Permite reordenar y agrupar campos

Permite definir relaciones inline

Se pueden definir los nombres de las


tablas a mostrar mediante la clase Meta
Se pueden definir los nombres de los
campos a mostrar mediante la prop.
verbose_name

Admin

demo del panel


./manage.py runserver

Plantillas

Las plantillas de diseo de Django se


usan para generar la respuesta al
navegador.

HTML

Se pueden heredar y modificar bloques


Tienen un formato propio, con tags y
filtros:

if, for, block, extends, url

length, date, time, urlencode, random

Plantillas
{% extends "base_generic.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for story in story_list %}
<h2>
<a href="{{ story.get_absolute_url }}">
{{ story.headline|upper }}
</a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}

Vistas

Las vistas son funciones que se llaman


cuando se visita una pgina.
Son el pegamento entre los modelos y las
plantillas.
Reciben el objeto request junto con
parmetros adicionales.
Deben devolver un HttpRequest

Vistas
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world)

Vistas
from django.shortcuts import render_to_response,
get_object_or_404
from na.shop.models import Producto
def detail(request, pid):
p = get_object_or_404(Producto, pk=pid)
return render_to_response('detail.html',
{'producto': p})

URLConf

Cmo funcionan las URLs?

Es una lista de expresiones regulares.

Se encarga de relacionar una URL con


una Vista.
Se evala de comienzo a fin hasta
encontrar una regexp que coincida con la
URL pedida.

URLConf
from django.conf.urls.defaults import *
# urls.py
urlpatters = patterns(
(r'^detail/(?P<pid>\d+)/$', 'na.shop.views.detail'),
(r'^buy/(?P<pid>\d+)/$', 'na.shop.views.buy'),
(r'^confirmbuy/$', 'na.shop.views.confirmbuy'),
)

URLConf

demo
mostrar las URLs

Django

Preguntas?
Versin en vivo del sitio en:
http://django.alejolp.com.ar