Download Desarrollo de Aplicaciones Web con Django

Document related concepts
no text concepts found
Transcript
Desarrollo de Aplicaciones Web con Django
Pablo Suárez Hernández
[email protected]
Oficina de Software Libre
Universidad de La Laguna
http://www.osl.ull.es/
Cursos ISLA: Octubre - Noviembre 2009
¿Qué es Django?
Framework basado en Python
Desarrollo de aplicaciones web
Facilidad y Rapidez
Modular (Don't Repeat Yourself)
“Django, a web framework for perfectionist
with deadlines”
Cursos ISLA: Octubre - Noviembre 2009
¿Qué vamos a hacer?
➢
➢
1ª Sesión:
➢ Introducción a Python y Django
➢ Desarrollo sencillo de una aplicación web
(Blog)
2ª Sesión:
➢ Django Avanzado (Forms, Templates, ...)
➢ Desarrollo completo de un sistema de
multiples blogs.
➢ Django en producción.
Cursos ISLA: Octubre - Noviembre 2009
¿Qué lenguaje de
programación?
Cursos ISLA: Octubre - Noviembre 2009
Python
Guido Van Rossum, 1991
Lenguaje interpretado
Paradigma:
- Estructural
- Orientado a objetos
- Práctico y Funcional
Legible (indentación obligatoria)
Multiplataforma
Open Source (PSF) – Compatible con GPL
Cursos ISLA: Octubre - Noviembre 2009
Python
Pragmatismo vs Fundamentalismo:
# Hola mundo en python
print “Hola Mundo!”
/* Hola Mundo en JAVA */
class HolaMundo {
public static void main(String[] args) {
System.out.println("Hola Mundo!");
}
}
Cursos ISLA: Octubre - Noviembre 2009
Python: Ejemplos
$ python
>>> text = "Curso Django en Cursos ISLA 09"
>>> print text
Curso Django en Cursos ISLA 09
>>> print text[:12]
Curso Django
>>> print text[16:]
Cursos ISLA 09
>>> print (text[6:12] + " ") * 3 + "!!"
Django Django Django !!
Cursos ISLA: Octubre - Noviembre 2009
Python: Ejemplos
>>> text = "Curso Django en Cursos ISLA 09"
>>> if "ISLA" in text:
... print "valido"
... else:
... print "no valido"
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
>>> for i in ["string", 'a', 5.2, False]:
... print i
Cursos ISLA: Octubre - Noviembre 2009
Python: Ejemplos
>>> dict = { 'clave1' : "mensaje", 'clave2' : "mensaje2" }
>>> for i in dict:
... print i
...
clave1
clave2
>>> for i in dict:
... print dict[i]
...
mensaje
mensaje2
Cursos ISLA: Octubre - Noviembre 2009
Python: Ejemplos
>>> class A:
... def func_a(self):
... print "A"
...
>>> class B(A):
... def func_b(self):
... self.func_a()
... print "B"
...
>>> a = A()
>>> a.func_a()
>>> a = B()
>>> a.func_b()
Cursos ISLA: Octubre - Noviembre 2009
Python: Ejemplos
>>> def factorial(x):
... if x == 0:
... return 1
... else:
... return x * factorial(x­1)
...
>>> factorial(10)
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
>>> fact = lambda x:(1 if x == 0 else x * fact(x­1))
>>> factorial(10)
>>> suma = lambda x, y: (x+y)
>>> suma(2,4)
Cursos ISLA: Octubre - Noviembre 2009
http://www.djangoproject.com/
Cursos ISLA: Octubre - Noviembre 2009
Django: Historia
2003: Lawrence Journal,
Kansas - USA
2005: BSD & v0.90
2006: v0.95
2007: v0.96
2008: Foundation & v1.0
2009: EuroDjangoCon
Cursos ISLA: Octubre - Noviembre 2009
Features
Servidor HTTP
ORM
URL dispatcher
Lenguaje de Templates
Consola Interactiva
Documentación
Cursos ISLA: Octubre - Noviembre 2009
Features
Interface de Administración
Forms
Middleware & Signals
Autenticación y Permisos
i18n y L10n
Caché
Cursos ISLA: Octubre - Noviembre 2009
Arquitectura
Implementa una arquitectura de software que
separa los datos de una aplicación, la interfaz de
usuario, y la lógica de control en tres componentes
distintos. Modelo Vista Template (MVT).
Modelos → datos
Vistas → lógica
Templates → frontend
Cursos ISLA: Octubre - Noviembre 2009
Modelos
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField()
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
----------------------------------------------------------------El ORM soporta MySQL, PosgreSQL, Sqlite3, ORACLE.
¡¡¡ NI RASTRO DE SQL !!!
Cursos ISLA: Octubre - Noviembre 2009
URLs
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^polls/$', 'mysite.polls.views.index'),
(r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'),
(r'^polls/(?P<poll_id>\d+)/results/$',
'mysite.polls.views.results'),
(r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
(r'^admin/', include(admin.site.urls)),
)
Cursos ISLA: Octubre - Noviembre 2009
Vistas
from django.shortcuts import render_to_response
from mysite.polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.all().order_by('pub_date')[:5]
return render_to_response('polls/index.html',
{'latest_poll_list': latest_poll_list})
Cursos ISLA: Octubre - Noviembre 2009
Templates
<html>
<body>
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li>{{ poll.question }}</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
</body>
</html>
Cursos ISLA: Octubre - Noviembre 2009
HTTPRequest - HTTPResponse
Cursos ISLA: Octubre - Noviembre 2009
Referencias
Django Project
http://www.djangoproject.com/
Django en español
http://django.es/
Python & Django – Marcin Mierzejewski
http://www.slideshare.net/
Cursos ISLA: Octubre - Noviembre 2009