Django

El rockstar de los web developers

Por Jorge Luis Hernández C. / @lesthack

Jorge Luis Hernandez


ISC :: Tecnológico de Celaya

Traductor Debian GNU/Linux

XMMS2 & Azucar

Organizador FLISoL Celaya

Coordinador Nacional FLISoL desde 2013

Propulsor activo del Software Libre

Temática

  1. Desarrollo de Web Apps.
  2. Modelos de desarrollo.
  3. Escalamiento.

¿A quien va dirigida?

  • Programadores - Developers
  • Testers.
  • Analistas.
  • Aquitectos.
  • ¿Diseñadores? No, a ellos no :(

Conocimientos previos.

  1. Conocimientos básicos de programación (En cualquier lenguaje).
  2. Ganas de aprender algo nuevo.

Disclaimer

  1. Esto no es un taller o curso de programación.
  2. Se admiten mujeres.
  3. Pregunta cuanto tengas dudas.
  4. ¿Admitimos a .Neteros? Si
  5. ¿Que opino de Ruby on Rails?

¿Que es Django?

Sobre Django

  1. Web Framework
    The Web framework for perfectionists with deadline.
  2. Python 2.x y 3.x
  3. (Model Template View) Modelo Vista Plantilla
  4. (Object Relation Mapping) ORM Integrado
  5. URL's elegantes
  6. Internacionalización
  7. Interfaz Administrativa integrada
  8. Sistema de Cache integrado

¿ Mucha información ?

Empecemos de cero

Aprendamos Python

¿Que necesitamos?

  1. Definición de:
    1. Tipos de Datos
    2. Variables
    3. Constantes
    4. Arreglos
    5. Listas
    6. Diccionarios
  2. Estructuras
    1. Decisión: IF, ELSE, CASE
    2. Ciclos: FOR, WHILE, DO-WHILE
  3. "Avanzado"
    1. Funciones
    2. Clases-Objetos

Ejemplos

  1. Hola mundo
                                        
    #!/usr/bin/python
    
    print "Hola mundo"
                                        
                                    
  2. Definiciones
                                        
    nombre = "Juan"
    edad = 12
    peso = 82.5
                                        
                                    
  3. Tuplas, Listas y Diccionarios
                                        
    musica = ("rock", "metal", "clasica")
    colores = ["azul", "rojo", "verde"]
    usuarios_emails = {
        "juan": "juan@gmail.com",
        "jorge": "j.torres@gmail.com"
    }
                                        
                                    
  1. Funciones
                                                                    
    def suma(a, b):
        return a+b
                                        
                                    
  2. Ciclos
                                                                    
    for i in range(100):
        print i
    
    while n > 0:
        n = n - 1    
                                        
                                    
  3. Decisiones
                                                                    
    if edad > 18:
        print "Eres mayor de edad" 
    else:
        print "Lo siento, aun eres un niñato"
                                        
                                    

Aprender mas sobre python

Python para todos - Raul González Duque

El zen de python

  1. Bello es mejor que feo.
  2. Explícito es mejor que implícito.
  3. Simple es mejor que complejo.
  4. Complejo es mejor que complicado.
  5. Plano es mejor que anidado.
  6. Disperso es mejor que denso.
  7. La legibilidad cuenta.
  8. Los casos especiales no son tan especiales como para quebrantar las reglas.
  9. Aunque lo práctico gana a la pureza.
  10. Los errores nunca deberían dejarse pasar silenciosamente.
  11. A menos que hayan sido silenciados explícitamente.
  12. Frente a la ambigüedad, rechaza la tentación de adivinar.
  13. Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
  14. Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.
  15. Ahora es mejor que nunca.
  16. Aunque nunca es a menudo mejor que ya mismo.
  17. Si la implementación es difícil de explicar, es una mala idea.
  18. Si la implementación es fácil de explicar, puede que sea una buena idea.
  19. Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

La arquitectura de una aplicación Django

Sistema Operativo (GNU/Linux)

Base de Datos

HTTP Server

Python

Virtualenvwrapper

Django 1.4

Djanto-Extensions

ORM

Templates

Views

Django 1.6

South

ORM

Templates

Views

Estructura de un proyecto Django

Creando un proyecto

                                
                                $ django-admin.py startproject mysite

    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py
                                
                            

Deployment Modo Dev

                                
                                $ ./manage.py runserver
    Validating models...

    0 errors found
    April 25, 2014 - 11:00:00
    Django version 1.6.3, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.                            
                                
                            

Estructura de un proyecto Django

Hermosas pantallas de depuración

Estructura de un proyecto Django

Aplicaciones

                                
                                $ python manage.py startapp polls

polls/
    __init__.py
    admin.py
    models.py
    tests.py
    views.py                                
                                
                            

Validación

                                
                                $ python manage.py validate
0 errors found                                
                                
                            

Estructura de un proyecto Django

Sincronización

                                
                                $ python manage.py syncdb

Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'lesthack'):    
Email address: lesthack@gmail.com
Password: 
Password (again): 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
                                
                            

Estructura de un proyecto Django

Autenticación

Estructura de un proyecto Django

Panel de Administración

El modelo Django

models.py

                                
from django.db import models

class encuesta(models.Model):
    nombre = models.CharField(max_length=200)

class pregunta(models.Model):
    encuesta = models.ForeignKey(encuesta)
    pregunta_text = models.CharField(max_length=200)
    fecha = models.DateTimeField(auto_now_add = True)
                                
                        

Uso

                            
mipregunta = pregunta.objects.get(id=1)
mipregunta.encuesta.nombre
                            
                        

Las vistas Django

urls.py

                                
from django.conf.urls import url
from polls import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^otro/$', views.index, name='index')
]                            
                                
                            

views.py

                                    
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hola mundo, estas en la vista index.")
                                    
                            

Las vistas Django

http://localhost:8000/

Los Templates Django

views.py

                                
def myindex(request):
    nombre = 'Jorge Hernandez'
    lista = range(0,100)
    return render_to_response(
        'index.html',
        {'nombre': nombre, 'lista': lista}, 
        context_instance=RequestContext(request)
    )
                                
                            

templates/index.html

                                

Este es un template

Ejemplo de valor variable: {{ nombre }}

Lista:

    {% for elemento in lista %}
  1. {{ elemento }}
  2. {% endfor %}

El Admin Django

admin.py

                                
from django import forms
from django.contrib import admin
from polls.models import *
import datetime

class encuestaAdmin(admin.ModelAdmin):
    list_display = ['id', 'nombre']
    list_display_links = ['nombre']
    search_fields = ['id', 'nombre']

class preguntaAdmin(admin.ModelAdmin):
    list_display = ['id', 'encuesta', 'pregunta_text', 'fecha']
    list_display_links = ['id']
    search_fields = ['id', 'encuesta', 'pregunta_text', 'fecha']
    list_filter = ['fecha']

admin.site.register(encuesta, encuestaAdmin)
admin.site.register(pregunta, preguntaAdmin)                                
                                
                            

El Admin Django

Recomendaciones

South: Migraciones DB

Django-Suit: Interfaz Moderna

Grappelli: Interfaz Moderna

Django Extensions: Plugins

Django Debug Toolbar: Depuración

Django-CMS: CMS personalizable

Django Rest Framework: API

Django SocialAuth: Autenticación Social

Gracias.


Twitter: @lesthack

Blog: lesthack.com.mx

Email: lesthack@gmail.com

Github: github.com/lesthack