DJANGO 

 

"El Web Framework para perfeccionistas"

Django

Django es un framework web de código abierto escrito en Python que permite construir aplicaciones web más rápido y con menos código.

Django fue inicialmente desarrollado para gestionar aplicaciones web de páginas orientadas a noticias de World Online, más tarde se liberó bajo licencia BSD. Django se centra en automatizar todo lo posible y se adhiere al principio DRY(Don't Repeat Yourself).

El sitio web oficial en inglés es https://www.djangoproject.com/

Pero...    

¿Por qué Django?

PYTHON

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Es multiplataforma y multiparadigma

Ventajas

  • Legible: sintaxis intuitiva y estricta
  • Productivo: ahorra mucho código.
  • Portable: para todo sistema operativo.
  • Recargado: viene con muchas librerías por defecto.

Primeros Pasos Con Python

VARIABLES

Las variables en python no necesitan ser definidas ni tampoco su tipo de dato a diferencia de otros lenguajes de programación

A=3
B=A

FUNCIONES

Las funciones en python son definidas con def junto a un nombre y los parametros que utilizaras terminando con dos puntos. Luego adentro de la función de forma identada ejecutas las operacion.

 def my_first_function():
 	return "Python rules"

 my_first_function()	

LISTAS

Las listas son estructuras de datos que se encargan de almacenar y ordenar elementos, las listas son del tipo mutable y pueden manejar varios tipos de datos a la vez.

lista = [1, True, "Awante Táchira", [1,2,3,5,6,7]]

TUPLAS

Tienen el mismo formato de las listas pero a diferencia de ellas, las tuplas son inmutables.

tupla = (1, True, "Awante Táchira")

CICLO FOR

 for i in lista:
	print i

>> 1, True, "Awante Táchira", [1,2,3]

 for i in range(4):
	print i

>> 1, 2, 3, 4

DICCIONARIOS

 

En los diccionarios tienes un grupo de datos con un formato: la primera cadena o número será la clave para acceder al segundo dato, el segundo dato será el dato al cual accederás con la llave.

  D = { "Framework": "Django" , "Descripcion": "The Best Framework", "Lenguaje": Python }
  print D["Framework"]

>> Django

CLASES

Para definir la clase usas class y el nombre. En caso de tener parámetros los pones entre paréntesis. 
Para crear un constructor haces una función dentro de la clase con el nombre __init__ y de parámetros self (significa su clase misma).

  class Frameworks(object):
  		def __init__ (self, framework, lenguaje):
  			self.framework = framework
  			self.lenguaje= lenguaje

  		def info(self):
  			return "Uso %s que está escrito en %s" % (self.framework, self.lenguaje)

  persona = Perfil("Django", "Python")
  print persona.info()

>> Uso Django que está escrito en Python

Mi Primera app en Django

Lo primero que debemos tener instalado es pip

  $ wget https://bootstrap.pypa.io/get-pip.py
  $ python get-pip.py

Luego instalamos virtualenv

  $ pip install virtualenv
  $ virtualenv venv
  $ source venv/bin/activate

Ya adentro de nuestro entorno virtual instalamos Django y creamos nuestro projecto

(venv) $ pip install django
(venv) $ django-admin.py startproject blog

Así quedaría nuestra estructura

.
├── blog
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Ejecutamos el servidor de desarrollo

 (venv) $ python manage.py runserver

Creamos nuestra app

  (venv) $ python manage.py startapp app
.
├── app
│   ├── admin.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── blog
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Entonces podemos decir que el flujo de trabajo de Django es el siguiente

Creando Los Modelos

from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Post(models.Model):
	titulo = models.CharField(max_length=150)
	contenido = models.TextField()
	slugUrl = models.SlugField(max_length=255, blank=True, default="" )

	def save(self, *args, **kwargs):
		if not self.id:
			self.slugUrl = slugify(self.titulo)
		super(Post, self).save(*args, **kwargs)

	def __str__(self):
		return self.titulo

models.py

Y en el admin.py

from django.contrib import admin


from .models import Post
# Register your models here.
admin.site.register(Post)

MIGRACIONES

$ python manage.py makemigrations app
$ python manage.py migrate app
$ python manage.py syncdb
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Post',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('titulo', models.CharField(max_length=150)),
                ('contenido', models.TextField()),
            ],
            options={
            },
            bases=(models.Model,),
        ),
    ]

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'blog.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
)

Vistas y ORM 

from django.shortcuts import render, get_object_or_404
from app.models import Post
# Create your views here.


def posts(request):
	posts = Post.objects.all()
	template = "posts.html"
	return render(request,template,locals())


def postdetail(request, slugUrl):
	post = get_object_or_404(Post, slugUrl = slugUrl)
	template = "post.html"
	return render(request,template,locals())

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',

    url(r'^$', 'app.views.posts', name='posts'),
    url(r'^blog/([^/]+)$', 'app.views.postdetail', name ='postdetail'),
    url(r'^admin/', include(admin.site.urls)),
)

TEMPLATES

posts.html y post.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	{% for post in posts %}
	<div class="">
		<h1>{{post.titulo}}</h1>
		<p>{{post.contenido}}</p>
		<a href="blog/{{post.slugUrl}}">Ver detalladamente</a>
	</div>
	{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>	
	<div class="">
		<h1>{{post.titulo}}</h1>
		<p>{{post.contenido}}</p>
	</div>
</body>
</html>

settings.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '6=q-u$ys-x&m_lr!-7k2b_ew9@na*xdflbmaikdh-(mu81l+%+'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'blog.urls'

WSGI_APPLICATION = 'blog.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

AJA  PERO Y ENTONCES

¿POR QUÉ DJANGO?

  • Python
  • ORM
  • ADMIN
  • DRY

 

“Esto seguro es mentira, en situaciones mas complejas seguro ya no se puede usar”

“Simple no significa limitado, sino bien diseñado.”

Made with Slides.com