Este documento ofrece una introducción a Python y Django. Explica que Python es un lenguaje de código abierto multiplataforma que no requiere compilación. Django es un framework web para Python que sigue el patrón MVT y proporciona características como ORM, plantillas, administración automática y formularios. El documento también describe cómo crear un proyecto Django, incluyendo modelos, vistas, plantillas y URLs.
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
Taller de introducción al desarrollo web con Django, impartido en la Tenerife Lan Party 2012.
"Te Interesa desarrollar proyectos para la web? ¿Posees un espíritu perfeccionista, pero siempre te falta tiempo? Entonces lo que necesitas en un framework de desarrollo para web que te quite de encima los problemas y te permita concentrarte en lo realmente importante: tu idea.
Quizá Django pueda ayudarte. Django es código abierto, modular, escrito en Python, y muy potente. En este taller daremos una introducción a Django, e implementaremos desde cero una aplicación web para gestionar los informes secretos de SHIELD. Con registro de usuarios, acceso a base de datos, páginas dinámicas y servicios web. En cuatro horas."
Generación automática de documentos usando Appy/POD
(Codigo fuente disponible con licencia CC-BY en https://bitbucket.org/euribates/presentacion-appy/)
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
Taller de introducción al desarrollo web con Django, impartido en la Tenerife Lan Party 2012.
"Te Interesa desarrollar proyectos para la web? ¿Posees un espíritu perfeccionista, pero siempre te falta tiempo? Entonces lo que necesitas en un framework de desarrollo para web que te quite de encima los problemas y te permita concentrarte en lo realmente importante: tu idea.
Quizá Django pueda ayudarte. Django es código abierto, modular, escrito en Python, y muy potente. En este taller daremos una introducción a Django, e implementaremos desde cero una aplicación web para gestionar los informes secretos de SHIELD. Con registro de usuarios, acceso a base de datos, páginas dinámicas y servicios web. En cuatro horas."
Generación automática de documentos usando Appy/POD
(Codigo fuente disponible con licencia CC-BY en https://bitbucket.org/euribates/presentacion-appy/)
PHP, una introducción a modo de presentación como tutorial básico llegando hasta clases y pasando por la conexión con una oferta de servicios web mediante protocolo SOAP con WSDL.
Composer es un administrador de paquetes flexible, simple y que se encarga de la administración de dependencias de nuestro proyecto. Está inspirado en npm de node.js y Bundler de Ruby.
Composer ha cambiado la comunidad PHP y está reinventado la forma de trabajar con PHP.
Gracias a Composer la comunidad PHP es más feliz y podrá dejar de reinventar la rueda una y otra vez.
PHP es un lenguaje de scripting orientado al desarrollo de aplicaciones web. En una primera parte se explica los principios del lenguaje, algunas herramientas y un esbozo de una aplicación web escrita en PHP. En una segunda parte se presenta Symfony, un framework PHP que reúne las mejores prácticas de desarrollo de aplicaciones web.
Aumenta la seguridad de tus formularios gracias a recaptcha de google.
Introduccióna recaptcha y jQuery
Aplicable a cualquier tipo de formulario, login, registro, contacto, etc.
¿Qué son los patrones de diseño?. El patrón Singleton. El patrón Registry
El patrón Factory. El patrón Decorator
El patrón Observer. El patrón Front Controller.
El patrón MVC
PRESENTACION ELECTRONICA SOBRE LA INSTALACION DE UN SISTEMA OPERATIVO, TAREA SOLICITITADA POR EL ISC EDUARDO CASTILLO, DOCENTE DE LA MATERIA ENSAMBLAJE DE EQUIPOS DE COMPUTO EN EL PLANTEL DEL CETis 114.
PHP, una introducción a modo de presentación como tutorial básico llegando hasta clases y pasando por la conexión con una oferta de servicios web mediante protocolo SOAP con WSDL.
Composer es un administrador de paquetes flexible, simple y que se encarga de la administración de dependencias de nuestro proyecto. Está inspirado en npm de node.js y Bundler de Ruby.
Composer ha cambiado la comunidad PHP y está reinventado la forma de trabajar con PHP.
Gracias a Composer la comunidad PHP es más feliz y podrá dejar de reinventar la rueda una y otra vez.
PHP es un lenguaje de scripting orientado al desarrollo de aplicaciones web. En una primera parte se explica los principios del lenguaje, algunas herramientas y un esbozo de una aplicación web escrita en PHP. En una segunda parte se presenta Symfony, un framework PHP que reúne las mejores prácticas de desarrollo de aplicaciones web.
Aumenta la seguridad de tus formularios gracias a recaptcha de google.
Introduccióna recaptcha y jQuery
Aplicable a cualquier tipo de formulario, login, registro, contacto, etc.
¿Qué son los patrones de diseño?. El patrón Singleton. El patrón Registry
El patrón Factory. El patrón Decorator
El patrón Observer. El patrón Front Controller.
El patrón MVC
PRESENTACION ELECTRONICA SOBRE LA INSTALACION DE UN SISTEMA OPERATIVO, TAREA SOLICITITADA POR EL ISC EDUARDO CASTILLO, DOCENTE DE LA MATERIA ENSAMBLAJE DE EQUIPOS DE COMPUTO EN EL PLANTEL DEL CETis 114.
Espero les sirva este manual paso a paso de como hacer su primera aplicación en Python, usando como framework web Django, en fedora19, saludos y suerte a todos.
Stalin Tusa V.
Combinación ganadora: Plone como CMS, tu framework preferido como frontendmenttes
Plone es un excelente sistema de gestión de contenidos. Recientemente ha sido elegido como el mejor CMS no-PHP en un popular concurso anual. A pesar de esto, muchos desarrolladores web de Python encuentran complejo a Zope, el framework con el que esta desarrollado el CMS.
Ahora, ¿qué tal si pudieras usar Plone solo como un gestor de contenidos y tu framework favorito, cualquiera sea, para implementar un front-end de forma transparente, obteniendo una configuración basada sobre una aplicación probada y de bajo mantenimiento, como backend siendo libre para escribir tu propia aplicación, usando el poder y flexibilidad de tu framework web?
En esta charla, se mostrarán ejemplos realizados con un par de productos de terceros de Plone y front-ends en varios frameworks.
Corporación de Industrias Tecnológicas S.A. - Capacitaciones en Informática - Programación con CodeIgniter
www.CorpintecSA.com
contacto@CorpintecSA.com
This is an introduction to Django that I gave in the University of Coruña. It is the same as I those in English but it's updated with generic views and model forms.
Esto es una introducción a Django que di en la Universidade da Coruña. Es la misma que las que tengo en inglés pero actualizada con vistas genéricas y formularios para modelos.
This slides are about what is drupal? and why you should use drupal. The target for this slides are students of last courses of web apps development.
This slides was created by:
@keilovecraft
@Nesta_
This slides are based on http://www.slideshare.net/zekivazquez/taller-drupal-jornadas-software-libre-uca (by @RabbitLair)
IONIC, el framework para crear aplicaciones híbridas multiplataformabetabeers
En esta charla, Juan nos va a enseñar los conceptos básicos para crear una aplicación móvil multiplataforma usando el framework "IONIC". Aprenderemos cómo instalar las herramientas básicas para su uso, haremos una breve aproximación a los distintos plugins que nos ofrece "Cordova" y aprenderemos un poco de la arquitectura interna de IONIC (basado en un patrón MVC, el cuál usa AngularJS, Typescript y CSS (bajo SASS).
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)betabeers
La transformación digital ha traído nuevas opciones para desplegar aplicaciones y las exigencias de flexibilidad en el desarrollo de negocio son cada vez mayores. ¿Infraestructura propia? ¿Proveedores de servicios? ¿AWS? ¿Azure? En el próximo Betabeers Bilbao, Jaime Balañá, Director Técnico de NetApp, explicará cómo las empresas pueden aprovechar estas distintas opciones sea cual sea su dimensión de negocio y sin cambiar la forma de gestionar sus datos.
Blockchain: la revolución industrial de internet - Oscar Lagebetabeers
Oscar Lage nos hablará de Blockchain una tecnología revolucionaria que viene para quedarse y su capacidad para descentralizar la confianza. Esta cualidad que permite eliminar los intermediarios en muchos procesos y servicios empresariales, dando lugar a nuevos modelos de negocio basados en la desintermediación y la colaboración. La principal diferencia entre Blockchain e internet es que mientras que la red se limita al intercambio de información, la cadena de bloques permite intercambiar valor. Por ejemplo, con Blockchain podremos comprar o vender casas, cosas e ideas directamente entre nosotros sin necesidad de intermediarios, como Amazon, Visa o Wallapop.
Cloud Learning: la formación del siglo XXI - Mónica Mediavillabetabeers
La industria de la educación online y el e-Learning sigue avanzando y proponiendo nuevas maneras de aprender. Estamos en un momento de transición en el que los escenarios formativos locales presenciales se están transformando en escenarios formativos globales en la nube.
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
Desarrollo web en Nodejs con Pillars por Chelo Quilón. En esta charla veremos inicialmente conceptos de Node.js y JavaScript, para después introducir las características diferenciadoras del desarrollo web en Node.js y se expondrá la metodología para crear una aplicación web mediante el framework Pillars.js.
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbaobetabeers
Falso. La línea recta al éxito no existe, pero convivir con las curvas es parte del camino. Jon Torrado cuenta con una amplia trayectoria como emprendedor y nos contará su experiencia. Especialmente las claves de GamersWalk donde es Co-founder y CTO. Un proyecto disfrutar de los streamers y eventos de eSport, con los mejores premios.
Ponencia sobre emprendizaje en el Betabeers Bilbao sobre emprendizaje el 24/03/2017
6 errores a evitar si eres una startup móvil y quieres evolucionar tu appbetabeers
Has publicado una versión en el Apple Store con una feature espectacular. Tras un par de días en producción te das cuenta de que algo no va bien y que tienes malas reviews en el store. Mientras localizas el error vas perdiendo cada vez más usuarios... ¿te suena?
No tienes una arquitectura limpia definida en tu proyecto, por lo que te cuesta localizar este fallo, un fallo que podría haberse previsto usando Unit Test, o haberlo detectado a tiempo usando un sistema de crash reporting.
Tras unos años trabajando para startups móviles de diferentes partes del mundo como freelance, Roberto Garrido nos habla de su stack tecnológico preferido para intentar atajar este tipo de problemas.
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)betabeers
Integración y entrega continua: principios y prácticas englobados desde de estos conceptos y por supuesto, beneficios que estas prácticas pueden ofrecer para nuestro producto o negocio.
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)betabeers
Hablaremos de las cualidades que debe tener un Project Manager internacional, así como de los retos a los que se enfrenta a la hora de ejercer su liderazgo, con escasa autoridad y debiendo actuar como mediador de conflictos en distintos contextos culturales. También repasaremos los estándares y buenas prácticas en gestión de proyectos más valoradas a nivel internacional, y conoceremos la metodología de trabajo y herramientas adoptadas por Gfi-GaiaTradeFactory para gestionar sus proyectos europeos.
Presentación en Betabeers Madrid - Marzo 2016
IBM Bluemix posee un extenso catálogo de servicios para ayudar a los desarrolladores en su trabajo. Dentro de estos servicios se encuentra Watson, que contiene una serie de servicios cognitivos para enriquecer el funcionamiento de las aplicaciones: análisis de sentimientos de textos, convertir voz a texto y viceversa o extraer información de fotografías, etc.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
Pesado, lento, antiguo, complicado y complejo son los calificativos que suelen venir a la mente cuando pensamos en aplicaciones web con Java. Y en verdad es así si utilizamos frameworks tradicionales (JSF, Struts, Spring, etc.), enfocados a desarrollar grandes aplicaciones empresariales o corporativas. Pero si necesitamos hacer una aplicación web pequeñas y simples, ¿no hay ningún framework que nos ayude sin toda la complejidad de los tradicionales? Pues sí que lo hay y se llama Spark Java.
Buenas prácticas para la optimización webbetabeers
Buenas prácticas en el frontend, y acciones en el servidor, para hacer que tu web vuele. Impartida por @lmmartin en el XI Betabeers Badajoz (16/07/2015).
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015betabeers
¿Qué es el Big Data? ¿Qué diferencia hay entre una base de datos relacional y una documental? El almacenamiento masivo de datos es una tendencia en los proyectos tecnológicos. Gracias a bases de datos como MongoDB ahora es posible. Xabier Tranche cuenta con una amplia en proyectos digitales y en marketing, siendo el promotor de Start-ups como Muaacka. Pondrá a nuestra disposición toda su experiencia en esta ponencia
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015betabeers
PAYTPV tiene como función reducir los pasos en los procesos de compra y mejorar la experiencia de los clientes a la hora de pagar en cualquier página Web, Móvil, Tablet o SmarTV. Las soluciones de PAYTPV permiten a las empresas poder operar a través del TPV que estas ya tengan contratado con su entidad Bancaria, permitiendo que sus clientes puedan pagar directamente en su página Web, Móvil o Tablet. Los clientes no tendrán que salirse de una experiencia de compra integrada y el cobro y respuesta positiva o negativa se les ofrece en la misma página.
2. 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
3. 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
4. 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:
01. a = 2
02. if a + 3 == 5:
03. print a
04
5. 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
6. 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
7. Condicionales: Ejemplo
01. if a == b or c != 126:
02. mensaje = "Dentro del if"
03. print mensaje
04. else:
05. print "Dentro del else"
06. print "Fuera"
07
8. Bucles: Ejemplo
01. lista = ["Ana", "Juan", "Marta"]
02. for nombre in lista:
03. print "Hola %s" % nombre
Hola Ana
Hola Juan
Hola Marta
08
9. Leer un fichero: Ejemplo
01. fichero = open("texto.txt")
02. for linea in fichero:
03. print linea
09
10. Funciones: Ejemplo
01. def saludar(persona):
02. if persona == "Miquel":
03. print "¡Vaya pelo! ¿Cuál es tu secreto?"
04. else:
05. print "Hola %s" % persona
10
11. 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
12. ¿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
13. ¿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
14. ¿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
15. 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
16. 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
18. Crear un proyecto
Creamos nuestro proyecto y sus archivos iniciales con el comando:
django-admin.py startproject mi_proyecto
18
19. 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
21. 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
22. Crear una aplicación
Dentro de la ruta de nuestro proyecto utilizamos manage.py para crear
aplicaciones:
python manage.py startapp biblioteca
22
23. 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
24. Models: modelos de datos
01. class Autor(models.Model):
02. nombre = models.CharField(max_length=150)
03.
04. class Libro(models.Model):
05. autor = models.ForeignKey(Autor, related_name='libros')
06. titulo = models.CharField(max_length=150)
07. resumen = models.TextField(blank=True)
24
25. 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
26. Views: Vistas de la aplicación
01. def autor_detail(request, id):
02. autor = get_object_or_404(Autor, id=id)
03. return render_to_response('autor.html', { 'autor':autor }
26
27. Templates: Plantilla HTML
01. <html>
02. <head><title>{{ autor.nombre }}</title></head>
03. <body>
04. {% for libro in autor.libros.all %}
05. <h2>{{ libro.titulo }}</h2>
06. <p>{{ libro.resumen }}</p>
07. {% endfor %}
08. </body> </html>
27
28. Urls: URL para nuestra vista
Utilizamos expresiones regulares para las URLs:
01. urlpatterns = patterns('',
02. # ...
03. url(r'^autor/(?P<id>d+)/$', autor_detail, name='autor'),
04. )
28
29. Funcionamiento de las peticiones HTTP
1. El usuario pide una URL (por GET ó POST)
2. Django busca la primera URL que coincida con la solicitada (urls.py)
3. Se ejecuta la vista (función) a la que apunta esa URL (views.py)
4. En la vista se utilizan los models (modelos de datos) para consultar la BD
5. Los datos resultantes se introducen en la plantilla (templates)
6. Se devuleve una respuesta HTTP con el HTML generado
29
30. Con nuestro ejemplo
1. El navegador solicita la URL http://www.miweb.com/autor/33/
2. Django busca una coincidencia en urls.py
^autor/(?P<id>d+)/$ coincide con /autor/33/
3. Se ejecuta la vista a la que apunta esa URL: autor_detail(id=33)
4. En la vista se consulta a la BD para obtener el Autor con id 33
5. La vista pasa el objeto Autor devuelto a la plantilla autor.html
6. Django procesa la plantilla y devuleve el HTML generado al navegador
30
32. 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
33. Probando el ORM
01. # crear un autor
02. cervantes = Autor.objects.create(nombre='Cervantes')
03.
04. # crear un libro del autor
05. Libro.objects.create(titulo='Don Quijote',
06. resumen='bla bla',
07. autor=cervantes)
33
34. Probando el ORM 2
01. # obtener todos los autores
02. Autor.objects.all()
03.
04. # obtener libros cuyo título empieza por "Don"
05. Libro.objects.filter(titulo__startswith='Don')
34
35. Probando el ORM 3
01. # obtener los libros de Cervantes ordenados A-Z
02. autor = Autor.objects.get(nombre='Cervantes')
03. libros = autor.libros.order_by('titulo')
04.
05. # eliminar el autor
06. autor.delete()
35
36. ¿Qué incluye Django?
• ORM (mapeador de objetos con la base de datos)
• Lenguaje de plantillas
36
37. 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
42. ¿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
43. 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
44. Forms y ModelForms
01. class ContactForm(forms.Form):
02. email = forms.EmailField(label='E-mail')
03. message = forms.CharField(widget=forms.Textarea)
04.
05. class LibroForm(forms.ModelForm):
06. class Meta:
07. model = Libro
44
45. Vista con validación de formulario
01. def contacto(request):
02. if request.method == 'POST':
03. form = ContactForm(request.POST)
04. if form.is_valid():
05. return HttpResponseRedirect('/gracias/')
06. else:
07. form = ContactForm()
08. return render_to_response('contacto.html', {'form':form })
45
46. ¿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
47. 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
48. Quién usa Django
• Google en su AppEngine
• Nasa
• New York Times
• Washington Post
• VMWare
48
49. 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