Django

El rockstar de los web developers

Por Jorge Luis Hernández C. / @lesthack

Temática

  1. Desarrollo Web Apps (fácil, rápido, cómodo)
  2. Modelos de desarrollo
  3. Escalamiento
  4. Programación

¿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. Pregunta cuanto tengas dudas.
  3. ¿Admitimos a .Neteros? Si
  4. ¿Me gusta el café?

¿Que es Django?

Sobre Django

  1. Web Framework
    Django makes it easier to build better Web apps more quickly and with less code.
  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

Sobre Django

Django Arch

Sobre Django

¿Quienes usan Django?

  1. Pinterest
  2. Disqus
  3. Instagram
  4. Mozilla
  5. BitBucket
  6. NASA
  7. Etc

¿ 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.6

South

ORM

Templates

Views

Django 1.9

Djanto-Extensions

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
                                
                            

Deploy Modo Dev

                                
                                $ ./manage.py runserver
July 03, 2016 - 01:42:54
Django version 1.9.7, using settings 'mysite2.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

Migración

                                
                                $ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying sessions.0001_initial... OK
                                
                            

Estructura de un proyecto Django

Creación Superusuario

                                
                                $ python manage.py createsuperuser
Username (leave blank to use 'lesthack'): usuario
Email address: lesthack@gmail.com
Password: 
Password (again):
Superuser created successfully.
                                
                            

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.contrib import admin
from polls.models import *

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

@admin.register(pregunta)
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']
                                
                            

El Admin Django

Recomendaciones

Django-Suit: Interfaz Moderna (Licencia)

Grappelli: Interfaz Moderna Free

Django-Material: Interfaz Material Design Free

Django Extensions: Plugins Necesarios

Django-CMS: Content Managment

Wagtail: Content Managment

Tastypie: API

Python Social Auth: Autenticación Social

Gracias.


Twitter: @lesthack

Blog: lesthack.com.mx

Email: lesthack@gmail.com

Github: github.com/lesthack