Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Curso Django

Avatar for paurosello paurosello
November 12, 2012

Curso Django

Curso Django ACM 2012

Avatar for paurosello

paurosello

November 12, 2012
Tweet

Other Decks in Technology

Transcript

  1. Curso de Django I Pau Roselló Van Schoor [email protected] ACM

    Facultad de Informática Universidad Politécnica de Madrid
  2. ACM Asociación de la Facultad de Informática de la UPM

    Puedes contactar con nosotros en: !  Web: http://acm.asoc.fi.upm.es !  Twitter: @acmfiupm !  Búscanos en Facebook y Tuenti Existimos desde 1986
  3. ¿Aplicación web Django ? ! Protocolo: HTTP ! Lenguaje en el Servidor:

    Python ! Lenguajes en el Cliente: HTML, Javascript, CSS
  4. ¿ Por qué elegir Django ? !  Desarrollo activo de

    la comunidad !  MVC como patrón de desarrollo !  ORM integrado !  Urls organizadas y limpias !  Panel de Administración !  Escrito en Python!
  5. Patrón de desarrollo (MVC) !  Modelo !  Abstracción de los

    datos a almacenar definido mediante clases y guardado en la base de datos. !  Vista !  Actúa como el controlador de MVC y decide cual es la información que se le manda al usuario. !  Template !  Define como se presenta la infomación al usuario.
  6. Iniciando un proyecto !  $> virtualenv venv && source venv/bin/activate

    !  $> pip install django !  $> django-admin.py startproject acmtut !  $> django-admin.py startapp encuestas
  7. Configuración de la base de datos DATABASES = { ’default':

    { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'db.db’ } }
  8. Zona de administración urls.py from django.contrib import admin admin.autodiscover() urlpatterns

    = patterns('’, … (r’ˆadmin/’, include(admin.site.urls)), …) Settings.py INSTALLED_APPS = ( … ’django.contrib.admin’, …)
  9. Modelo Tipos de Campos !  CharField !  DateTimeField !  EmailField

    !  ImageField !  SlugField Atributos de campo !  Blank !  Null !  Choices !  Default !  Unique
  10. Modelo Simple from django.db import models class Votacion(models.Model): titulo =

    models.CharField(max_length=150, primary_key=True) activa = models.BooleanField() fecha = models.DateTimeField(auto_now_add=True) slug = models.SlugField()
  11. Modelo Simple def __unicode__(self): return self.titulo def save(self, *args, **kwargs):

    self.slug = slugify(self.titulo) super(Votacion, self).save(*args, **kwargs) admin.site.register(Votacion)
  12. Relaciones !  Muchos a uno !  votacion = models.ForeignKey(Votacion) ! 

    Muchos a muchos !  ingredientes = models.ManyToManyField(Ingrediente) !  Uno a uno !  lugar = models.OneToOneField(Lugar)
  13. Modelo con Relaciones class Voto(models.Model): votacion = models.ForeignKey(Votacion) opcion =

    models.BooleanField() fecha = models.DateTimeField(auto_now_add=True) def __unicode__(self): return self.votacion + " " + self.opcion
  14. Vista !  Recojemos los datos y describimos la lógica de

    la vista !  Preparamos los datos a presentar !  Devolvemos la plantilla con los datos recogidos
  15. Template {% if is_logged_in %} <h1> Bienvenido {{usuario.nombre}} </h1> {%

    else %} <h1> Hola desconocido </h1> {% endif %}
  16. Herencia Templates {% extends “base.html” %} {% block contenido %}

    {% for votacion in votaciones %} <h1>{{votacion.titulo}}</h1> <h2>{{votacion.fecha|date:"d/m/Y”}}</h2> {% endfor %} {% endblock %}
  17. Formulario de un Modelo from django.forms import ModelForm class ArticleForm(ModelForm):

    class Meta: model = Votacion fields = ('titulo', 'activa')
  18. Vista de Formulario contexto = RequestContext(request) if request.method == 'POST':

    form = ArticleForm(request.POST, request.FILES) if form.is_valid(): form.save()
  19. Heroku !  Ejecución del servidor de Django. !  Base de

    datos. !  Pluguins para control y gestión de la aplicación. !  Actualizaciones rápidas. !  Aumentar los recursos de forma fácil y rápida.
  20. Heroku !  $> heroku logs (ver los logs de la

    aplicacion) !  $> heroku info (información sobre la aplicación) !  $> heroku pg:info (ver informacion sobre la bd)