Академический Документы
Профессиональный Документы
Культура Документы
Septiembre 2011
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
c 2002-2011 Jess M. Gonzlez Barahona, Gregorio Robles y u a Jorge Ferrer. Algunos derechos reservados. Este art culo se distribuye bajo la licencia Reconocimiento-CompartirIgual 3.0 Espaa de Creative n Commons, disponible en
http://creativecommons.org/licenses/by-sa/3.0/es/deed.es
Este documento (o uno muy similar) est disponible en a Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones http://gsyc.es Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Plataformas extensibles
CMS: Joomla, Drupal... Portal: Plone/Zope, Liferay Portal... Plataformas de propsito espec o co: Moodle, Wordpress...
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Qu es Django? e
Entorno integrado de desarrollo de aplicaciones web Herramientas para gestionar la aplicacin o Framework (armazn) para presentacin de la aplicacin o o o Acceso a base de datos (correspondencia objeto-relacional) Seguridad (XSS, SQL Injection, ...) Componentes listos para usar (gestin de usuarios, sesiones, o interfaz administracin,...) o Cache, internacionalizacin, plantillas, etc. o http://docs.djangoproject.com/en/dev
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Preparativos
Usaremos la versin 1.3.1 o Disponible para Linux, *BSD, Windows, MacOS, etc. Descarga e instalacin en $DJANGO o tar xvzf Django-1.3.1.tar.gz Preparacin de entorno (necesario si no se ha instalado en o path habituales): export PATH=$DJANGO/django/bin:$PATH export PYTHONPATH=$DJANGO:$PYTHONPATH Comprobacin: o django-admin.py --version
http://docs.djangoproject.com/en/dev/topics/install/ #installing-an-official-release http://www.djangoproject.com/download/1.3.1/tarball/ Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Ms opciones de manage.py a $ python manage.py --help Ejecucin de la aplicacin (http://localhost:1234) o o $ python manage.py runserver 1234
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Proyecto:
__init__.py: chero vac directorio debe ser considerado o, un paquete Python manage.py: herramienta para gestionar el proyecto settings.py: conguracin del proyecto o urls.py: URLs de las aplicaciones del proyecto
Aplicacin: o
models.py: denicin de las clases del modelo de datos o views.py: vistas (cdigo invocado para cada recurso) o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Fichero settings.py
Fichero de conguracin, en Python o Conguracin de la base de datos (usaremos SQLite3) o ENGINE = django.db.backends.sqlite3 NAME = myproject.sqlite USER = PASSWORD = HOST = PORT = Aplicaciones instaladas INSTALLED_APPS = ( myproject.myfirstapp, ) Otros: zona horaria, codicacin, directorio de plantillas... o
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Declaracin de urls o
En el chero urls.py Usa expresiones regulares para asociar URLs (sin parmetros) a a vistas Ejemplo: urlpatterns = patterns(, url(r^$, myproject.myfirstapp.views.say_main,), url(r^hello, myproject.myfirstapp.views.say_hello,), url(r^bye/(.*), myproject.myfirstapp.views.say_bye_to,), url(r^number/(?P<number>[\d]+), myproject.myfirstapp.views.say_number,),
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Views
Cdigo invocado para una URL o conjunto de URLs o Debe ser un mtodo (o un objeto) e Los mtodos se denen en el chero myrstapp/views.py e Ejemplo: from django.http import HttpResponse def say_main(request): return HttpResponse(<h1>My Application</h1>) def say_hello(request): return HttpResponse(Hello!) def say_bye_to(request, name): return HttpResponse(Bye %s%name) def say_number(request, number=0): return HttpResponse(Number: %s%number)
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Relaciones:
ForeignKey(othermodel) ManyToManyField(self, symmetrical=False)
http: //docs.djangoproject.com/en/dev/ref/models/fields/
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
La shell de Django
Acceso a la API de los objetos de nuestro proyecto % python manage.py shell >>> from myproject.myfirstapp.models import MyFirstAppData >>> MyFirstAppData.objects.all() [] >>> p = MyFirstAppData(name="Jesus", birthday="2009-05-05") >>> p.save() >>> p.id 1 >>> MyFirstAppData.objects.filter(name="Jesus") ... >>> MyFirstAppData.objects.get(pk=1).name
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
from django.http import HttpResponse,HttpResponseNotFou from content.models import Pages def show_content(request, resource): try: record = Pages.objects.get(name=resource) return HttpResponse(record.page) except Pages.DoesNotExist: return HttpResponseNotFound( Page not found: /%s. % resource )
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Usuarios
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Admin site
Versin simple: o INSTALLED APPS (en settings.py) ha de incluir:
django.contrib.admin django.contrib.sessions (dependencia del anterior) ...y lo necesario para usuarios
Hay que crear las tablas pertinentes (manage.py syncdb) Enganche en urls.py from django.contrib import admin admin.autodiscover() ... (r^admin/, include(admin.site.urls)),
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Login
Utilizamos view predenida (entiende GET y POST) En urls.py: url(r^login, django.contrib.auth.views.login), Necesita una plantilla registration/login.html:
En settings.py: TEMPLATE_DIRS = (templates) Creacin de templates/registration/login.html o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
templates/registration/login.html
<html><body> <form method="post" action="/login"> <table> <tr><td>Username</td> <td>{{ form.username }}</td></tr> <tr><td>Password</td> <td>{{ form.password }}</td></tr> </table> <input type="submit" value="login" /> </form> </body></html>
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Plantillas (templates)
Ficheros de texto que pueden generar cualquier formato basado en texto (HTML, XML, CSV, etc.) Contienen:
Texto (que queda igual) Variables (reemplazadas por su valor cuando se evalan) u Filtros (modican variables cuando se evalan) u Etiquetas (controlan la lgica de la evaluacin de la plantilla) o o Comentarios {# Comentario #}
Pueden extender (heredar de) otras plantillas Se colocan en los directorios de plantillas (TEMPLATE DIRS en settings.py)
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Plantillas: etiquetas
for {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if {% if athlete_list %} Number of athletes: {{ athlete_list|length }} {% else %} No athletes. {% endif %}
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
ifequal, ifnotequal {% ifequal athlete.name coach.name %} ... {% endifequal %} {% ifnotequal athlete.name "Joe" %} ... {% endifnotequal %} block, extends: Herencia
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Ejemplo de plantilla
{% extends "base.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 %}
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
from django.conf.urls.defaults import * from django.views.generic.simple import direct_to_template urlpatterns = patterns(, url(r^about$, direct_to_template, { template: about.html }), )
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Los cheros estticos no se deber servir con Django... a an (lo hace mucho mejor un servidor web como Apache o Cherokee) ...pero se pueden servir django.views.static.serve() (r^css/(?P<path>.*)$, django.views.static.serve, {document_root: sfiles/css}),
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Generador de canales
Django viene con mdulos para generar canales RSS y Atom o View de alto nivel que genera el canal (feed):
(r^feeds/(?P<url>.*)/$, django.contrib.syndication.v {feed_dict: feeds}), Hay que proporcionar un diccionario con la correspondencia canal a objeto Feed: feeds = { latest: LatestEntries, categories: LatestEntriesByCategory, }
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Internacionalizacin o
Cadenas de traduccin en cdigo Python o o from django.utils.translation import ugettext as _ def my_view(request): output = _("Welcome to my site.") return HttpResponse(output) def my_view(request, m, d): output = _(Today is %(month)s, %(day)s.) % {month: m, day: d} return HttpResponse(output)
Jesus M. Gonzlez Barahona, Gregorio Robles Mart a nez Servicios y Aplicaciones Telemticas (2011-12) a
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Internacionalizacin (2) o
Cadenas de traduccin en plantillas o <title>{% trans "This is the title." %}</title> {% blocktrans %} This string will have {{ value }} inside. {% endblocktrans %}
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Internacionalizacin (3) o
Traducciones en los lenguajes requeridos django-admin.py makemessages -l es Activar el soporte para locale en Django
Presentacin de la asignatura o Cookies HTTP REST: Representational State Transfer Arquitectura modelo-vista-controlador Introduccin a XML o Hojas de estilo CSS Prcticas: Introduccin a Python a o Prcticas: Introduccin a Django a o
Referencias
Documentacin de Django o http://docs.djangoproject.com/en/dev Libro de Django http://www.djangobook.com Documentacin de Python o http://www.python.org/doc/ Tutorial sobre Django (e introduccin a Django) o http://docs.djangoproject.com/en/dev/intro