San Luis Oct 2008

Embed Size (px)

Citation preview

1. Introduccin a Django Manuel Kaufmann Octubre de 2008 http://www.python.com.ar 2. Introduccin a Django Qu es Django?

  • Framework
  • Rpido y limpio
  • Problemas resueltos

Para qu se utiliza?

  • Aplicaciones web
  • Blog's
  • Sistemas complejos
  • Encuesta

Historia

  • Necesidad en 2003
  • Lawrence Journal-World
  • En 2005 es liberado como software libre

3. Introduccin a Django Patrn de diseo MVC

  • Separar los componentes de la aplicacin
  • Datos
  • La interfaz de usuario
  • La lgica del sistema

Modelo (models.py)

  • Descripcin de las tablas
  • Clases de Python

Vista (views.py)

  • Lgica para mostrar resultados en pantalla
  • Procesar intervencin del usuario

Plantillas (index.html)

  • Forma de visualizar los resultados
  • Cdigo HTML y Django Template

4. Introduccin a Django Instalacin [ humitos ]$ wget -c http://www.djangoproject.com/download/1.0/tarball/ [ humitos ]$ tar xzvf Django-1.0.tar.gz ...... [ humitos ]$ cd Django-1.0 [ humitos ]$ sudo python setup.py install Prueba [ humitos ]$ python Python 2.5.2 (r252:60911, Aug6 2008, 09:17:29) [GCC 4.3.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.VERSION (1, 0, 'final') >>> 5. Introduccin a Django Comenzar un proyecto It worked!

  • http://localhost:8000/

Archivos del proyecto

  • __init__.py : indica a Python que este directorio es un paquete
  • manage.py : utilidad para interactuar con el proyecto
  • settings.py : configuraciones generales para el proyecto
  • urls.py : declaraciones de todas las urls del sitio web

[ humitos ]$ django-admin.py startproject blog [ humitos ]$ ls blog/ __init__.pymanage.pysettings.pyurls.py [ humitos ]$ python manage.py runserver 6. Introduccin a Django Mapear URL's

  • Funcionesvista
  • Mediante expresiones regulares
  • Varias urls, misma vista

Expresiones regulares

  • No por estructura de directorios, ni nombre de clases
  • Control absoluto
  • Grupos en las regex (nombrados o no)

Funcin para la url

  • Strings, 'blog.posts.views.my_view'
  • Objeto funcin importado/definido previamente
  • La funcin debe devolver un HttpResponse

7. Introduccin a Django Qu es una aplicacin?

  • Conjunto de archivos de cdigo fuente Python
  • Incluye sus modelos, vistas y plantillas

Cul es la diferencia con un proyecto?

  • Conjunto de aplicaciones
  • Configuraciones globales para todas las aplicaciones
  • Misma conexin a la base de datos
  • Permite reutilizar cdigo

Ejemplo [ humitos ]$ python manage.py startapp posts

  • Notar el uso demanage.py
  • Archivos__init__.py, models.py, views.py

8. Introduccin a Django Modelos

  • Base de datos
  • Un modelo por tabla
  • Propios de cada aplicacin

Configuracin del motor

  • Archivosettings.py del proyecto

Definicin de los modelos DATABASE_ENGINE = ' sqlite3 ' DATABASE_NAME = ' /home/humitos/blog/database.db ' DATABASE_USER = '' ...

  • Editar el archivomodels.pyde la aplicacin
  • Un modelo por tabla
  • Propios de cada aplicacin

9. Introduccin a Django Definicin de modelos Modelo 'Post'

  • Dos campos ms un id
  • tituloes un string de mximo 50 caracteres,contenidoes un texto () yetiquetases una relacin de muchos a muchos con Etiqueta
  • Equivalente en SQL:

fromdjango.dbimportmodels classPost(models.Model): titulo = models.CharField(max_length= 50 ) contenido = models.TextField() etiquetas = models.ManyToManyField(Etiqueta) [ humitos ]$ python manage.py sql posts 10. Introduccin a Django Definicin de modelos Instalar la aplicacin

  • Archivosettings.py
  • INSTALLED_APPS
  • Agregar la lnea'blog.posts'
  • Sincronizar la base de datos (syncdb)
  • Prueba en el shell

classEtiqueta(models.Model): nombre = models.CharField(max_length= 25 ) classComentario(models.Model): autor = models.CharField(max_length= 25 ) contenido = models.TextField() post = models.ForeignKey(Post) 11. Introduccin a Django Sistema de administracin

  • Aplicacin nativa de Django
  • ABM muy sencillo con interfaz web

Instalacin

  • Como cualquier otra aplicacin (INSTALLED_APPS)
  • Sincronizar la BD
  • Crear superusuario
  • Habilitar la url enurls.py
  • Acceder a http://localhost:8000/admin

Agregar nuestros modelos

  • admin.pyen cada aplicacin
  • Registrar los modelos

12. Introduccin a Django Vistas

  • Simple funcin de Python
  • Recibe una peticin web (request) y devuelve una respuesta
  • Imgen, archivo de texto, HTML, etc

Primer vista

  • Importar funciones, modelos y shotcuts necesarios
  • Definir una funcin
  • Manejar la peticin
  • Retornar un HttpResponse
  • Modificarurls.pypara que acepte esta vista

Agregar nuestros modelos

  • admin.pyen cada aplicacin
  • Registrar los modelos

13. Introduccin a Django Ejemplo fromdjango.shortcutsimportrender_to_response fromdjango.httpimportHttpResponseRedirect fromblog.posts.modelsimportPostForm, Post defagregar_post(request): ifrequest.method == ' GET ': formulario = PostForm() returnrender_to_response(' agregar_post.html ', {' formulario ': formulario}) else : formulario = PostForm(request.POST) ifformulario.is_valid(): formulario.save() returnHttpResponseRedirect(' / ') 14. Introduccin a Django Sistema de plantillas

  • Cdigo Django dentro de HTML
  • Flujos bsicos
  • Sustitucin de variables

Herencia

  • Definir un base.html
  • Header y footer
  • Cambiar
  • {% extends base.html %}
  • Escribir los bloques interesantes
  • {% block title %}

Etiquetas

  • I f:{% if variable %}
  • for : {% for post in posts %}
  • {% endfor %} / {% endif %}

15. Introduccin a Django Sistema de plantillas

  • Agregar nuestras plantillas ensettings.py
  • TEMPLATE_DIRS

Filtros

  • Se aplican a variables antes de ser mostradas
  • lower, truncatewords, etc
  • {{ variable | lower }}
  • {{ variable | truncatewords:25 }}

Extensin

  • Definir nuestros propios filtros, etiquetas y bloques
  • Con o sin argumentos
  • Muy sencillo

16. Introduccin a Django Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? Preguntas? 17. Introduccin a Django Manuel Kaufmann [email_address] Muchas Gracias! Comunidad Django:

  • Lista de correo:http://groups.google.com/group/django-es
  • Libro en espaol:http://humitos.homelinux.net/django-book
  • Canal de IRC:#django-es en irc.freenode.net