SlideShare a Scribd company logo
1 of 41
Download to read offline
¿Django?
Django!
Un framework web de alto nivel escrito en Python
que fomenta el desarrollo rápido y limpio 

y el diseño pragmático.
Django
Reinhardt
Nombrado en honor a
¿Quién usa Django?
Django en
SecurityHub
★ Python es un lenguaje de script de código abierto
★ Es multiplataforma: Linux, Mac OS X, Windows...
★ Es multiparadigma: Funcional y orientado a objetos
★ Es muy legible y conciso
★ Es interpretado: No necesitamos compilar nuestros programas
★ Python es fuertemente tipado pero tiene tipos dinámicos:

Una variable puede cambiar de tipo en ejecución pero el tipo se
tiene en cuenta para las operaciones
★ Es integrable con C, C++, Java y otros lenguajes
Django es Python
En la redacción de World Online para crear
aplicaciones web rápidamente con fechas ajustadas
Nace en un entorno periodístico
Django sigue el principio
Sigue el patrón MTV
Separa datos, interfaz de usuario y lógica
de control:
★ Model → modelo de datos (models.py)
★ View →vistas de datos (views.py): qué
datos se presentan
★ Template → plantillas de páginas
(generalmente archivos HTML): 

cómo se presentan los datos
El controlador es el propio framework
¿Qué hace Django?
★ Provee una estructura de trabajo bajo el patrón Model Template
View
★ Mapea objetos Python con la base de datos (ORM)
★ Permite diseñar URLs amigables para buscadores (útil para SEO)
★ Tiene un sistema de plantillas sencillo para diseñadores
★ Genera una interfaz de administración automática
★ Dispone de un framework para manejar formularios
★ Puede gestionar sesiones de usuario, autenticación, caché,
almacenamiento, sitemaps, internacionalización, etc.
Django es modular
Usa lo que quieras, integra lo que necesites
★ Backends almacenamiento de archivos
★ Backends de cache
★ Backends de autenticación
★ Sitio de administración
★ Sistema de templates de Django o uno propio
★ etc.
Aplicaciones contrib
★ auth: Autenticación de usuarios.
★ admin: Sitio de administración CRUD.
★ messages: Mensajes de aviso para usuarios.
★ sessions: Gestión de sesiones.
★ sites: Manejar distintos sitios web con un proyecto.
★ sitemaps: Generar sitemaps a partir de modelos.
★ syndication: Generar feeds RSS y Atom a partir de modelos.
★ gis: Trabajar con datos ego-espaciales (PostGIS)
Organización de un proyecto Django
★ Un desarrollo es un Proyecto
★ Un proyecto consta de una o varias aplicaciones
★ Cada aplicación hace algo en concreto
★ Proyecto: "Comunidad web" 

Aplicaciones: blog, foro, registro de usuarios, tienda on-line,
newsletter, agregador de feeds...
★ Una aplicación puede ser utilizada por distintos proyectos a la
vez
★ Un proyecto puede hacer funcionar varios sitios web
Estructura de un proyecto Django
/proyecto/	
  
	
  	
  	
  	
  /proyecto/	
  
	
  	
  	
  	
  	
  	
  	
  	
  __init__.py	
  
	
  	
  	
  	
  	
  	
  	
  	
  urls.py	
  
	
  	
  	
  	
  	
  	
  	
  	
  manage.py	
  
	
  	
  	
  	
  	
  	
  	
  	
  settings.py	
  
	
  	
  	
  	
  blog/	
  
	
  	
  	
  	
  	
  	
  	
  	
  __init__.py	
  
	
  	
  	
  	
  	
  	
  	
  models.py	
  
	
  	
  	
  	
  	
  	
  	
  views.py

	
  	
  	
  	
  	
  	
  	
  urls.py	
  
	
  	
  	
  	
  	
  	
  	
  templates/	
  
	
  	
  	
  	
  	
  	
  	
  static/	
  
	
  	
  	
  foro/	
  
	
  	
  	
  	
  	
  	
  	
  __init__.py	
  
	
  	
  	
  	
  	
  	
  	
  models.py	
  
	
  	
  	
  	
  	
  	
  	
  views.py	
  
	
  	
  	
  	
  	
  	
  	
  urls.py	
  
	
  	
  	
  	
  	
  	
  	
  templates/
Configuración del proyecto
Mapeo de URLs global
Vistas
URLs de la aplicación
Modelos de datos
Aplicación 1
Aplicación 2
Archivos de un proyecto
★ __init__.py 

Indica a Python que el directorio sea interpretado como un
paquete de Python
★ settings.py 

Contiene la configuración de la aplicación (conexión a bases de
datos, aplicaciones instaladas, etc.)
★ manage.py 

Nos permite ejecutar comandos de Django sobre el proyecto (ej.
para crear nuevas aplicaciones)
★ urls.py 

Contiene los patrones de URLs del proyecto
Archivos de una aplicación
★ __init__.py
★ models.py 

Contiene nuestros modelos de datos
★ views.py 

Contiene las vistas de la aplicación
★ tests.py 

Permite que incluyamos tests para la aplicación
★ urls.py

Es usual añadir un urls.py con las URLs de nuestra aplicación e
importarlas en el urls.py del proyecto por motivos de
organización.

Ensuciémonos las manos
Instalar Django
Instalamos Django con el comando:


	
  pip	
  install	
  django
Nuestro primer proyecto Django
Creamos nuestro proyecto web:



django-­‐admin	
  startproject	
  miweb
Y nuestra aplicación blog dentro de éste:



cd	
  miweb	
  
python	
  manage.py	
  startapp	
  blog
Arrancamos el servidor de desarrollo
Arrancamos el servidor de desarrollo:



python manage.py runserver
Y entramos en http://127.0.0.1:8000/ ¡Voila!
Activamos nuestra app
Añadimos la aplicación al setting INSTALLED_APPS en la
configuración del proyecto para activarla:









INSTALLED_APPS	
  =	
  (

	
  	
  	
  	
  'django.contrib.admin',

	
  	
  	
  	
  'django.contrib.auth',

	
  	
  	
  	
  'django.contrib.contenttypes',

	
  	
  	
  	
  'django.contrib.sessions',

	
  	
  	
  	
  'django.contrib.messages',

	
  	
  	
  	
  'django.contrib.staticfiles',

	
  	
  	
  	
  'blog',

)	
  
settings.py
Modelos de datos
★ Son clases de Python que heredan de django.db.models.Model
★ Definen la estructura de los datos que se almacenarán en la BD
★ Las tablas, índices, constraints etc. de la base de datos se
generan automáticamente a partir de los modelos
★ Un modelo está compuesto de campos. Django tiene distintos
tipos de campos para texto, números, ficheros, etc.
★ Cuando nuestros modelos cambian podemos crear migraciones
automáticas o personalizarlas
from	
  django.db	
  import	
  models

from	
  django.contrib.auth.models	
  import	
  User





class	
  Category(models.Model):

	
  	
  	
  	
  title	
  =	
  models.CharField(max_length=100)

	
  	
  	
  	
  slug	
  =	
  models.SlugField(max_length=100)



	
  	
  	
  def	
  __unicode__(self):

	
  	
  	
  	
  	
  	
  	
  	
  return	
  self.title





class	
  Post(models.Model):

	
  	
  	
  	
  title	
  =	
  models.CharField(max_length=100)

	
  	
  	
  	
  slug	
  =	
  models.SlugField(max_length=100)

	
  	
  	
  	
  author	
  =	
  models.ForeignKey(User,	
  related_name='posts')

	
  	
  	
  	
  content	
  =	
  models.TextField()

	
  	
  	
  	
  created_date	
  =	
  models.DateTimeField(auto_now_add=True)

	
  	
  	
  	
  published_date	
  =	
  models.DateField()

	
  	
  	
  	
  published	
  =	
  models.BooleanField(default=True)



	
  	
  	
  	
  class	
  Meta:

	
  	
  	
  	
  	
  	
  	
  	
  ordering	
  =	
  (‘-­‐published_date',)



	
  	
  	
  	
  def	
  __unicode__(self):

	
  	
  	
  	
  	
  	
  	
  	
  return	
  self.title
models.py
Sincronizamos la base de datos
Creamos la migración inicial para la base de datos:
python	
  manage.py	
  makemigrations
Migrations	
  for	
  'blog':

	
  	
  0001_initial.py:

	
  	
  	
  	
  -­‐	
  Create	
  model	
  Category

	
  	
  	
  	
  -­‐	
  Create	
  model	
  Post
Se crea un archivo Python de migración con los cambios de modelo:
Sincronizamos la base de datos
Ejecutamos las migraciones pendientes para crear las tablas y
constrains iniciales:
python	
  manage.py	
  migrate
Operations	
  to	
  perform:

	
  	
  Apply	
  all	
  migrations:	
  admin,	
  blog,	
  contenttypes,	
  auth,	
  sessions



Running	
  migrations:

	
  	
  Applying	
  contenttypes.0001_initial...	
  OK

	
  	
  Applying	
  auth.0001_initial...	
  OK

	
  	
  Applying	
  admin.0001_initial...	
  OK

	
  	
  Applying	
  blog.0001_initial...	
  OK

	
  	
  Applying	
  sessions.0001_initial...	
  OK
SQL generado
BEGIN;	
  
CREATE	
  TABLE	
  "blog_category"	
  (

"id"	
  integer	
  NOT	
  NULL	
  PRIMARY	
  KEY	
  AUTOINCREMENT,

"title"	
  varchar(100)	
  NOT	
  NULL,

"slug"	
  varchar(100)	
  NOT	
  NULL);	
  
CREATE	
  TABLE	
  "blog_post"	
  (

"id"	
  integer	
  NOT	
  NULL	
  PRIMARY	
  KEY	
  AUTOINCREMENT,

"title"	
  varchar(100)	
  NOT	
  NULL,

"slug"	
  varchar(100)	
  NOT	
  NULL,

"content"	
  text	
  NOT	
  NULL,

"created_date"	
  datetime	
  NOT	
  NULL,

"published_date"	
  date	
  NOT	
  NULL,

"published"	
  bool	
  NOT	
  NULL,

"author_id"	
  integer	
  NOT	
  NULL	
  REFERENCES	
  "auth_user"	
  ("id"));	
  
CREATE	
  INDEX	
  "blog_category_2dbcba41"	
  ON	
  "blog_category"	
  ("slug");

CREATE	
  INDEX	
  "blog_post_2dbcba41"	
  ON	
  "blog_post"	
  ("slug");

CREATE	
  INDEX	
  "blog_post_4f331e2f"	
  ON	
  "blog_post"	
  ("author_id");	
  
COMMIT;
¿Y si ya tengo una base de datos?
Django ofrece un comando para generar las clases Python de los
modelos a partir de una base de datos existente mediante
introspección:
python manage.py inspectdb
Creamos un sitio de administración
Django incluye un paquete para generar un sitio de administración
mediante introspeccción de modelos: django.contrib.admin
from	
  django.contrib	
  import	
  admin

from	
  .models	
  import	
  Category,	
  Post



class	
  CategoryAdmin(admin.ModelAdmin):

	
  	
  	
  	
  list_display	
  =	
  ['title',	
  'slug']

	
  	
  	
  	
  prepopulated_fields	
  =	
  {'slug':('title',)}



admin.site.register(Category,	
  CategoryAdmin)





class	
  PostAdmin(admin.ModelAdmin):

	
  	
  	
  	
  list_display	
  =	
  ['title',	
  'category',	
  'slug',	
  'author',	
  'created_date',	
  
'published_date',	
  'published']

	
  	
  	
  	
  list_filter	
  =	
  ['created_date',	
  'published_date',	
  'published',	
  'category']

	
  	
  	
  	
  search_fields	
  =	
  ['title',	
  'content']

	
  	
  	
  	
  prepopulated_fields	
  =	
  {'slug':('title',)}



admin.site.register(Post,	
  PostAdmin)
admin.py
Creamos un super-usuario
Creamos un super-usuario para acceder al sitio de administración:


python manage.py createsuperuser
Username	
  (leave	
  blank	
  to	
  use	
  'zenx'):	
  admin

Email	
  address:	
  admin@paradigmatecnologico.com

Password:	
  

Password	
  (again):	
  	
  
Superuser	
  created	
  successfully.
Accedemos al sitio de administración
Entramos en http://127.0.0.1:8000/admin/ y vemos nuestros
modelos:
Creamos objetos
Creamos un post y vemos el listado del posts:
Creamos las vistas
A
from	
  django.shortcuts	
  import	
  render,	
  get_object_or_404

from	
  .models	
  import	
  Category,	
  Post





def	
  post_list(request,	
  category_slug=None):

	
  	
  	
  	
  posts	
  =	
  Post.objects.filter(published=True)

	
  	
  	
  	
  if	
  category_slug:

	
  	
  	
  	
  	
  	
  	
  	
  #	
  si	
  viene	
  una	
  categoría	
  filtramos	
  por	
  ella

	
  	
  	
  	
  	
  	
  	
  	
  category	
  =	
  get_object_or_404(Category,	
  slug=category_slug)

	
  	
  	
  	
  	
  	
  	
  	
  posts	
  =	
  posts.filter(category=category)

	
  	
  	
  	
  return	
  render(request,	
  'blog/post/list.html',	
  locals())





def	
  post_detail(request,	
  id,	
  slug):

	
  	
  	
  	
  post	
  =	
  get_object_or_404(Post,	
  id=id,	
  slug=slug,	
  published=True)

	
  	
  	
  	
  return	
  render(request,	
  'blog/post/detail.html',	
  {'post':	
  post})
views.py
Añadimos URLs para las vistas
from	
  django.conf.urls	
  import	
  patterns,	
  include,	
  url

from	
  django.contrib	
  import	
  admin

from	
  .views	
  import	
  post_list,	
  post_detail





urlpatterns	
  =	
  patterns('',

	
  	
  	
  	
  url(r'^$',	
  post_list,	
  name='post_list'),

	
  	
  	
  	
  url(r'^(?P<category_slug>[-­‐w]+)/$',	
  post_list,	
  name='post_list_by_category'),

	
  	
  	
  	
  url(r'^(?P<id>d+)/(?P<slug>[-­‐w]+)/$',	
  post_detail,	
  name='post_detail'),	
  	
  	
  	
  

)	
  
urls.py
Añadimos nuestras URLs al proyecto
from	
  django.conf.urls	
  import	
  patterns,	
  include,	
  url

from	
  django.contrib	
  import	
  admin





urlpatterns	
  =	
  patterns('',

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

	
  	
  	
  	
  url(r'^',	
  include('blog.urls')),

)	
  
urls.py
Creamos una plantilla base
{%	
  load	
  static	
  %}

<!DOCTYPE	
  html>

<html>

<head>

	
  	
  	
  	
  <title>{%	
  block	
  title	
  %}{%	
  endblock	
  %}</title>

	
  	
  	
  	
  <link	
  href="{%	
  static	
  "css/blog.css"	
  %}"	
  rel="stylesheet">

</head>



<body>

	
  	
  	
  	
  <div	
  class="content">

	
  	
  	
  	
  	
  	
  	
  	
  {%	
  block	
  content	
  %}

	
  	
  	
  	
  	
  	
  	
  	
  {%	
  endblock	
  %}

	
  	
  	
  	
  </div>

</body>

</html>	
  
base.html
Plantilla de listado de posts
A{%	
  extends	
  "blog/base.html"	
  %}



{%	
  block	
  title	
  %}

	
  	
  	
  	
  {%	
  if	
  category	
  %}{{	
  category.title	
  }}{%	
  else	
  %}Mi	
  blog{%	
  endif	
  %}

{%	
  endblock	
  %}	
  
{%	
  block	
  content	
  %}

	
  	
  	
  	
  <h1>{%	
  if	
  category	
  %}Posts	
  de	
  {{	
  category.title	
  }}{%	
  else	
  %}Mi	
  blog{%	
  endif	
  %}</h1>

	
  	
  	
  	
  {%	
  for	
  post	
  in	
  posts	
  %}

	
  	
  	
  	
  	
  	
  	
  	
  <h2><a	
  href="{%	
  url	
  "blog:post_detail"	
  post.id	
  post.slug	
  %}">{{	
  post.title	
  }}</
a></h2>

	
  	
  	
  	
  	
  	
  	
  	
  <p	
  class="date">

	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Publicado	
  el	
  {{	
  post.published_date|date:"d	
  de	
  M.	
  Y"	
  }}	
  por	
  
{{	
  post.author.name	
  }}	
  en	
  

	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <a	
  href="{%	
  url	
  "blog:post_list_by_category"	
  post.category.slug	
  
%}">{{	
  post.category	
  }}</a>

	
  	
  	
  	
  	
  	
  	
  	
  </p>

	
  	
  	
  	
  	
  	
  	
  	
  {{	
  post.content|truncatewords:30|linebreaks	
  }}

	
  	
  	
  	
  {%	
  endfor	
  %}

{%	
  endblock	
  %}	
  
post/list.html
Plantilla de detalle de post
A
{%	
  extends	
  "blog/base.html"	
  %}	
  
{%	
  block	
  title	
  %}{{	
  post.title	
  }}{%	
  endblock	
  %}



{%	
  block	
  content	
  %}

	
  	
  	
  	
  <h1>{{	
  post.title	
  }}</h1>

	
  	
  	
  	
  <p	
  class="date">

	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Publicado	
  el	
  {{	
  post.published_date|date:"d	
  de	
  M.	
  Y"	
  }}	
  por	
  
{{	
  post.author.name	
  }}	
  en	
  

	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <a	
  href="{%	
  url	
  "blog:post_list_by_category"	
  post.category.slug	
  
%}">{{	
  post.category	
  }}</a>

	
  	
  	
  	
  	
  	
  	
  	
  </p>

	
  	
  	
  	
  {{	
  post.content|linebreaks	
  }}

{%	
  endblock	
  %}	
  
post/detail.html
¡Nuestro primer blog con Django!
Django framework web Python

More Related Content

What's hot (20)

Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Poo
PooPoo
Poo
 
Caracteristicas de Java
Caracteristicas de JavaCaracteristicas de Java
Caracteristicas de Java
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to django
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Apache web service
Apache web serviceApache web service
Apache web service
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
FYBSC IT Web Programming Unit IV PHP and MySQL
FYBSC IT Web Programming Unit IV  PHP and MySQLFYBSC IT Web Programming Unit IV  PHP and MySQL
FYBSC IT Web Programming Unit IV PHP and MySQL
 
Tomcat Server
Tomcat ServerTomcat Server
Tomcat Server
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction Django
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
Django by rj
Django by rjDjango by rj
Django by rj
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPM
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for Beginners
 
HTTP Request and Response Structure
HTTP Request and Response StructureHTTP Request and Response Structure
HTTP Request and Response Structure
 
INTERNET INFORMATION SERVICES (IIS)
INTERNET INFORMATION SERVICES (IIS)INTERNET INFORMATION SERVICES (IIS)
INTERNET INFORMATION SERVICES (IIS)
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?
 

Viewers also liked

Federaciones%20y%20deportes%20de%20asociaci%f3n%202008
Federaciones%20y%20deportes%20de%20asociaci%f3n%202008Federaciones%20y%20deportes%20de%20asociaci%f3n%202008
Federaciones%20y%20deportes%20de%20asociaci%f3n%202008Cesar A Morin H
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsParadigma Digital
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOParadigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for DevelopersParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 

Viewers also liked (20)

Federaciones%20y%20deportes%20de%20asociaci%f3n%202008
Federaciones%20y%20deportes%20de%20asociaci%f3n%202008Federaciones%20y%20deportes%20de%20asociaci%f3n%202008
Federaciones%20y%20deportes%20de%20asociaci%f3n%202008
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEO
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
UNA - Responsabilidad social empresarial
UNA - Responsabilidad social empresarial UNA - Responsabilidad social empresarial
UNA - Responsabilidad social empresarial
 
Google Analytics for Developers
Google Analytics for DevelopersGoogle Analytics for Developers
Google Analytics for Developers
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
UNA - DESARROLLO ORGANIZACIONAL - ADQUISICION DE EQUIPOS CON TECNOLOGÍA DE PUNTA
UNA - DESARROLLO ORGANIZACIONAL - ADQUISICION DE EQUIPOS CON TECNOLOGÍA DE PUNTAUNA - DESARROLLO ORGANIZACIONAL - ADQUISICION DE EQUIPOS CON TECNOLOGÍA DE PUNTA
UNA - DESARROLLO ORGANIZACIONAL - ADQUISICION DE EQUIPOS CON TECNOLOGÍA DE PUNTA
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
UNA (DESARROLLO ORGANIZACIONAL) - FOROS
UNA (DESARROLLO ORGANIZACIONAL) - FOROSUNA (DESARROLLO ORGANIZACIONAL) - FOROS
UNA (DESARROLLO ORGANIZACIONAL) - FOROS
 
UNA - ANALISIS GRUPAL DE UN ESTUDIO DE CASO - ORGANIZACION Y ENTORNO
UNA - ANALISIS GRUPAL DE UN ESTUDIO DE CASO - ORGANIZACION Y ENTORNOUNA - ANALISIS GRUPAL DE UN ESTUDIO DE CASO - ORGANIZACION Y ENTORNO
UNA - ANALISIS GRUPAL DE UN ESTUDIO DE CASO - ORGANIZACION Y ENTORNO
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
HTML5 Web Components
HTML5 Web ComponentsHTML5 Web Components
HTML5 Web Components
 
UNA - Análisis grupal de un estudio de caso - ORGANIZACION Y ENTORNO
UNA - Análisis grupal de un estudio de caso - ORGANIZACION Y ENTORNOUNA - Análisis grupal de un estudio de caso - ORGANIZACION Y ENTORNO
UNA - Análisis grupal de un estudio de caso - ORGANIZACION Y ENTORNO
 

Similar to Django framework web Python

Introducción a Python / Django
Introducción a Python / DjangoIntroducción a Python / Django
Introducción a Python / Djangobetabeers
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendmenttes
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeersbetabeers
 
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosDjango - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosGeorge Navarro Gomez
 
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosDjango - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosGeorge Navarro Gomez
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios webjcarazo
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corporacion de Industrias Tecnologicas S.A.
 
#JoomlaIO - Desarrollo de Plantillas para Joomla!
#JoomlaIO - Desarrollo de Plantillas para Joomla!#JoomlaIO - Desarrollo de Plantillas para Joomla!
#JoomlaIO - Desarrollo de Plantillas para Joomla!SergioIglesiasNET
 

Similar to Django framework web Python (20)

Django
DjangoDjango
Django
 
Introducción a Python / Django
Introducción a Python / DjangoIntroducción a Python / Django
Introducción a Python / Django
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeers
 
Dia2
Dia2Dia2
Dia2
 
Django
DjangoDjango
Django
 
Angular Fundamentals
Angular FundamentalsAngular Fundamentals
Angular Fundamentals
 
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosDjango - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales Conceptos
 
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosDjango - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales Conceptos
 
RAML
RAMLRAML
RAML
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios web
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
Diseño web
Diseño webDiseño web
Diseño web
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Diseño web
Diseño webDiseño web
Diseño web
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
 
#JoomlaIO - Desarrollo de Plantillas para Joomla!
#JoomlaIO - Desarrollo de Plantillas para Joomla!#JoomlaIO - Desarrollo de Plantillas para Joomla!
#JoomlaIO - Desarrollo de Plantillas para Joomla!
 

More from Paradigma Digital

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Paradigma Digital
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxParadigma Digital
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixParadigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 

More from Paradigma Digital (16)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 
Seminario Apache Solr
Seminario Apache SolrSeminario Apache Solr
Seminario Apache Solr
 

Recently uploaded

Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.
Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.
Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.Ralvila5
 
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdf
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdfINTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdf
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdfGuillermoCamino4
 
CLASE 2- INFECCIONES nosocomialescesalud.pptx
CLASE 2- INFECCIONES nosocomialescesalud.pptxCLASE 2- INFECCIONES nosocomialescesalud.pptx
CLASE 2- INFECCIONES nosocomialescesalud.pptxLuisaPerdomo16
 
5. Célula animal y vegetal y sus diferencias.pptx
5. Célula animal y vegetal y sus diferencias.pptx5. Célula animal y vegetal y sus diferencias.pptx
5. Célula animal y vegetal y sus diferencias.pptxealva1
 
fisilogia y anatomia del oido y el equilibrio
fisilogia y anatomia del oido y el equilibriofisilogia y anatomia del oido y el equilibrio
fisilogia y anatomia del oido y el equilibrioyanezevelyn0
 
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidad
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidadPARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidad
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidadeumartinezvete
 
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptx
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptxTEJIDOS HISTOLÓGICOS osteona, canal de haves.pptx
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptxmorajoe2109
 
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptx
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptxDIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptx
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptxprofesionalscontable
 
Mapa conceptual de la Cristalografía .pdf
Mapa conceptual de la Cristalografía .pdfMapa conceptual de la Cristalografía .pdf
Mapa conceptual de la Cristalografía .pdfHeidyYamileth
 
Aprendamos el proceso de regeneración.pptx
Aprendamos el proceso de regeneración.pptxAprendamos el proceso de regeneración.pptx
Aprendamos el proceso de regeneración.pptxJuanaMLpez
 
AA. VV. - Historia mínima del Confucianismo [2021].pdf
AA. VV. - Historia mínima del Confucianismo [2021].pdfAA. VV. - Historia mínima del Confucianismo [2021].pdf
AA. VV. - Historia mínima del Confucianismo [2021].pdffrank0071
 
fundamentos del mejoramiento genético en los animales
fundamentos del mejoramiento genético en los animalesfundamentos del mejoramiento genético en los animales
fundamentos del mejoramiento genético en los animalesJuanVillarreal79
 
Reino Protista: su clasificación y características
Reino Protista: su clasificación y característicasReino Protista: su clasificación y características
Reino Protista: su clasificación y característicasmiguellopez895525
 
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdf
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdfLEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdf
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdfrvillegasp16001
 
Miología del bovino veterinaria métodos rápidos
Miología del bovino veterinaria métodos rápidosMiología del bovino veterinaria métodos rápidos
Miología del bovino veterinaria métodos rápidosmarielbispurocoleo5
 
calculo aplicado a la fisica 3 .pdf
calculo  aplicado  a  la  fisica  3 .pdfcalculo  aplicado  a  la  fisica  3 .pdf
calculo aplicado a la fisica 3 .pdfRolandPisfilLLuenGor
 
FRACTURAS EXPUESTAS en niños y adolecentes.pdf
FRACTURAS EXPUESTAS en niños y adolecentes.pdfFRACTURAS EXPUESTAS en niños y adolecentes.pdf
FRACTURAS EXPUESTAS en niños y adolecentes.pdfhugohilasaca
 
Novena a la Medalla Milagrosa, es una devoción
Novena a la Medalla Milagrosa,  es una devociónNovena a la Medalla Milagrosa,  es una devoción
Novena a la Medalla Milagrosa, es una devociónandres2973
 
Clase ii INTRODUCCION AL TRABAJO SOCIAL.
Clase ii INTRODUCCION AL TRABAJO SOCIAL.Clase ii INTRODUCCION AL TRABAJO SOCIAL.
Clase ii INTRODUCCION AL TRABAJO SOCIAL.Victor Rivera Tapia
 
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...Juan Carlos Fonseca Mata
 

Recently uploaded (20)

Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.
Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.
Carbohidratos, lipidos, acidos nucleicos, y principios del metabolismo.
 
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdf
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdfINTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdf
INTRODUCCIÓN A LAS DISPENSACIONES abril 2024.pdf
 
CLASE 2- INFECCIONES nosocomialescesalud.pptx
CLASE 2- INFECCIONES nosocomialescesalud.pptxCLASE 2- INFECCIONES nosocomialescesalud.pptx
CLASE 2- INFECCIONES nosocomialescesalud.pptx
 
5. Célula animal y vegetal y sus diferencias.pptx
5. Célula animal y vegetal y sus diferencias.pptx5. Célula animal y vegetal y sus diferencias.pptx
5. Célula animal y vegetal y sus diferencias.pptx
 
fisilogia y anatomia del oido y el equilibrio
fisilogia y anatomia del oido y el equilibriofisilogia y anatomia del oido y el equilibrio
fisilogia y anatomia del oido y el equilibrio
 
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidad
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidadPARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidad
PARTES y Anatomía de la ESCÁPULA.descrpcion, fncinalidad
 
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptx
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptxTEJIDOS HISTOLÓGICOS osteona, canal de haves.pptx
TEJIDOS HISTOLÓGICOS osteona, canal de haves.pptx
 
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptx
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptxDIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptx
DIAPOSITIVASDEPRIMERACATEGORIAIIPARTE (1).pptx
 
Mapa conceptual de la Cristalografía .pdf
Mapa conceptual de la Cristalografía .pdfMapa conceptual de la Cristalografía .pdf
Mapa conceptual de la Cristalografía .pdf
 
Aprendamos el proceso de regeneración.pptx
Aprendamos el proceso de regeneración.pptxAprendamos el proceso de regeneración.pptx
Aprendamos el proceso de regeneración.pptx
 
AA. VV. - Historia mínima del Confucianismo [2021].pdf
AA. VV. - Historia mínima del Confucianismo [2021].pdfAA. VV. - Historia mínima del Confucianismo [2021].pdf
AA. VV. - Historia mínima del Confucianismo [2021].pdf
 
fundamentos del mejoramiento genético en los animales
fundamentos del mejoramiento genético en los animalesfundamentos del mejoramiento genético en los animales
fundamentos del mejoramiento genético en los animales
 
Reino Protista: su clasificación y características
Reino Protista: su clasificación y característicasReino Protista: su clasificación y características
Reino Protista: su clasificación y características
 
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdf
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdfLEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdf
LEY FEDERAL DE TRABAJO IPN MEDICINA OCUPACIONAL.pdf
 
Miología del bovino veterinaria métodos rápidos
Miología del bovino veterinaria métodos rápidosMiología del bovino veterinaria métodos rápidos
Miología del bovino veterinaria métodos rápidos
 
calculo aplicado a la fisica 3 .pdf
calculo  aplicado  a  la  fisica  3 .pdfcalculo  aplicado  a  la  fisica  3 .pdf
calculo aplicado a la fisica 3 .pdf
 
FRACTURAS EXPUESTAS en niños y adolecentes.pdf
FRACTURAS EXPUESTAS en niños y adolecentes.pdfFRACTURAS EXPUESTAS en niños y adolecentes.pdf
FRACTURAS EXPUESTAS en niños y adolecentes.pdf
 
Novena a la Medalla Milagrosa, es una devoción
Novena a la Medalla Milagrosa,  es una devociónNovena a la Medalla Milagrosa,  es una devoción
Novena a la Medalla Milagrosa, es una devoción
 
Clase ii INTRODUCCION AL TRABAJO SOCIAL.
Clase ii INTRODUCCION AL TRABAJO SOCIAL.Clase ii INTRODUCCION AL TRABAJO SOCIAL.
Clase ii INTRODUCCION AL TRABAJO SOCIAL.
 
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...
Documento Técnico Base del Inventario de Especies Vegetales Nativas del Estad...
 

Django framework web Python

  • 1.
  • 3. Django! Un framework web de alto nivel escrito en Python que fomenta el desarrollo rápido y limpio 
 y el diseño pragmático.
  • 7. ★ Python es un lenguaje de script de código abierto ★ Es multiplataforma: Linux, Mac OS X, Windows... ★ Es multiparadigma: Funcional y orientado a objetos ★ Es muy legible y conciso ★ Es interpretado: No necesitamos compilar nuestros programas ★ Python es fuertemente tipado pero tiene tipos dinámicos:
 Una variable puede cambiar de tipo en ejecución pero el tipo se tiene en cuenta para las operaciones ★ Es integrable con C, C++, Java y otros lenguajes Django es Python
  • 8. En la redacción de World Online para crear aplicaciones web rápidamente con fechas ajustadas Nace en un entorno periodístico
  • 9. Django sigue el principio
  • 10. Sigue el patrón MTV Separa datos, interfaz de usuario y lógica de control: ★ Model → modelo de datos (models.py) ★ View →vistas de datos (views.py): qué datos se presentan ★ Template → plantillas de páginas (generalmente archivos HTML): 
 cómo se presentan los datos El controlador es el propio framework
  • 11. ¿Qué hace Django? ★ Provee una estructura de trabajo bajo el patrón Model Template View ★ Mapea objetos Python con la base de datos (ORM) ★ Permite diseñar URLs amigables para buscadores (útil para SEO) ★ Tiene un sistema de plantillas sencillo para diseñadores ★ Genera una interfaz de administración automática ★ Dispone de un framework para manejar formularios ★ Puede gestionar sesiones de usuario, autenticación, caché, almacenamiento, sitemaps, internacionalización, etc.
  • 13. Usa lo que quieras, integra lo que necesites ★ Backends almacenamiento de archivos ★ Backends de cache ★ Backends de autenticación ★ Sitio de administración ★ Sistema de templates de Django o uno propio ★ etc.
  • 14. Aplicaciones contrib ★ auth: Autenticación de usuarios. ★ admin: Sitio de administración CRUD. ★ messages: Mensajes de aviso para usuarios. ★ sessions: Gestión de sesiones. ★ sites: Manejar distintos sitios web con un proyecto. ★ sitemaps: Generar sitemaps a partir de modelos. ★ syndication: Generar feeds RSS y Atom a partir de modelos. ★ gis: Trabajar con datos ego-espaciales (PostGIS)
  • 15. Organización de un proyecto Django ★ Un desarrollo es un Proyecto ★ Un proyecto consta de una o varias aplicaciones ★ Cada aplicación hace algo en concreto ★ Proyecto: "Comunidad web" 
 Aplicaciones: blog, foro, registro de usuarios, tienda on-line, newsletter, agregador de feeds... ★ Una aplicación puede ser utilizada por distintos proyectos a la vez ★ Un proyecto puede hacer funcionar varios sitios web
  • 16. Estructura de un proyecto Django /proyecto/          /proyecto/                  __init__.py                  urls.py                  manage.py                  settings.py          blog/                  __init__.py                models.py                views.py
              urls.py                templates/                static/        foro/                __init__.py                models.py                views.py                urls.py                templates/ Configuración del proyecto Mapeo de URLs global Vistas URLs de la aplicación Modelos de datos Aplicación 1 Aplicación 2
  • 17. Archivos de un proyecto ★ __init__.py 
 Indica a Python que el directorio sea interpretado como un paquete de Python ★ settings.py 
 Contiene la configuración de la aplicación (conexión a bases de datos, aplicaciones instaladas, etc.) ★ manage.py 
 Nos permite ejecutar comandos de Django sobre el proyecto (ej. para crear nuevas aplicaciones) ★ urls.py 
 Contiene los patrones de URLs del proyecto
  • 18. Archivos de una aplicación ★ __init__.py ★ models.py 
 Contiene nuestros modelos de datos ★ views.py 
 Contiene las vistas de la aplicación ★ tests.py 
 Permite que incluyamos tests para la aplicación ★ urls.py
 Es usual añadir un urls.py con las URLs de nuestra aplicación e importarlas en el urls.py del proyecto por motivos de organización.

  • 20. Instalar Django Instalamos Django con el comando: 
  pip  install  django
  • 21. Nuestro primer proyecto Django Creamos nuestro proyecto web:
 
 django-­‐admin  startproject  miweb Y nuestra aplicación blog dentro de éste:
 
 cd  miweb   python  manage.py  startapp  blog
  • 22. Arrancamos el servidor de desarrollo Arrancamos el servidor de desarrollo:
 
 python manage.py runserver Y entramos en http://127.0.0.1:8000/ ¡Voila!
  • 23. Activamos nuestra app Añadimos la aplicación al setting INSTALLED_APPS en la configuración del proyecto para activarla:
 
 
 
 
 INSTALLED_APPS  =  (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',
 )   settings.py
  • 24. Modelos de datos ★ Son clases de Python que heredan de django.db.models.Model ★ Definen la estructura de los datos que se almacenarán en la BD ★ Las tablas, índices, constraints etc. de la base de datos se generan automáticamente a partir de los modelos ★ Un modelo está compuesto de campos. Django tiene distintos tipos de campos para texto, números, ficheros, etc. ★ Cuando nuestros modelos cambian podemos crear migraciones automáticas o personalizarlas
  • 25. from  django.db  import  models
 from  django.contrib.auth.models  import  User
 
 
 class  Category(models.Model):
        title  =  models.CharField(max_length=100)
        slug  =  models.SlugField(max_length=100)
 
      def  __unicode__(self):
                return  self.title
 
 
 class  Post(models.Model):
        title  =  models.CharField(max_length=100)
        slug  =  models.SlugField(max_length=100)
        author  =  models.ForeignKey(User,  related_name='posts')
        content  =  models.TextField()
        created_date  =  models.DateTimeField(auto_now_add=True)
        published_date  =  models.DateField()
        published  =  models.BooleanField(default=True)
 
        class  Meta:
                ordering  =  (‘-­‐published_date',)
 
        def  __unicode__(self):
                return  self.title models.py
  • 26. Sincronizamos la base de datos Creamos la migración inicial para la base de datos: python  manage.py  makemigrations Migrations  for  'blog':
    0001_initial.py:
        -­‐  Create  model  Category
        -­‐  Create  model  Post Se crea un archivo Python de migración con los cambios de modelo:
  • 27. Sincronizamos la base de datos Ejecutamos las migraciones pendientes para crear las tablas y constrains iniciales: python  manage.py  migrate Operations  to  perform:
    Apply  all  migrations:  admin,  blog,  contenttypes,  auth,  sessions
 
 Running  migrations:
    Applying  contenttypes.0001_initial...  OK
    Applying  auth.0001_initial...  OK
    Applying  admin.0001_initial...  OK
    Applying  blog.0001_initial...  OK
    Applying  sessions.0001_initial...  OK
  • 28. SQL generado BEGIN;   CREATE  TABLE  "blog_category"  (
 "id"  integer  NOT  NULL  PRIMARY  KEY  AUTOINCREMENT,
 "title"  varchar(100)  NOT  NULL,
 "slug"  varchar(100)  NOT  NULL);   CREATE  TABLE  "blog_post"  (
 "id"  integer  NOT  NULL  PRIMARY  KEY  AUTOINCREMENT,
 "title"  varchar(100)  NOT  NULL,
 "slug"  varchar(100)  NOT  NULL,
 "content"  text  NOT  NULL,
 "created_date"  datetime  NOT  NULL,
 "published_date"  date  NOT  NULL,
 "published"  bool  NOT  NULL,
 "author_id"  integer  NOT  NULL  REFERENCES  "auth_user"  ("id"));   CREATE  INDEX  "blog_category_2dbcba41"  ON  "blog_category"  ("slug");
 CREATE  INDEX  "blog_post_2dbcba41"  ON  "blog_post"  ("slug");
 CREATE  INDEX  "blog_post_4f331e2f"  ON  "blog_post"  ("author_id");   COMMIT;
  • 29. ¿Y si ya tengo una base de datos? Django ofrece un comando para generar las clases Python de los modelos a partir de una base de datos existente mediante introspección: python manage.py inspectdb
  • 30. Creamos un sitio de administración Django incluye un paquete para generar un sitio de administración mediante introspeccción de modelos: django.contrib.admin from  django.contrib  import  admin
 from  .models  import  Category,  Post
 
 class  CategoryAdmin(admin.ModelAdmin):
        list_display  =  ['title',  'slug']
        prepopulated_fields  =  {'slug':('title',)}
 
 admin.site.register(Category,  CategoryAdmin)
 
 
 class  PostAdmin(admin.ModelAdmin):
        list_display  =  ['title',  'category',  'slug',  'author',  'created_date',   'published_date',  'published']
        list_filter  =  ['created_date',  'published_date',  'published',  'category']
        search_fields  =  ['title',  'content']
        prepopulated_fields  =  {'slug':('title',)}
 
 admin.site.register(Post,  PostAdmin) admin.py
  • 31. Creamos un super-usuario Creamos un super-usuario para acceder al sitio de administración: 
 python manage.py createsuperuser Username  (leave  blank  to  use  'zenx'):  admin
 Email  address:  admin@paradigmatecnologico.com
 Password:  
 Password  (again):     Superuser  created  successfully.
  • 32. Accedemos al sitio de administración Entramos en http://127.0.0.1:8000/admin/ y vemos nuestros modelos:
  • 33. Creamos objetos Creamos un post y vemos el listado del posts:
  • 34. Creamos las vistas A from  django.shortcuts  import  render,  get_object_or_404
 from  .models  import  Category,  Post
 
 
 def  post_list(request,  category_slug=None):
        posts  =  Post.objects.filter(published=True)
        if  category_slug:
                #  si  viene  una  categoría  filtramos  por  ella
                category  =  get_object_or_404(Category,  slug=category_slug)
                posts  =  posts.filter(category=category)
        return  render(request,  'blog/post/list.html',  locals())
 
 
 def  post_detail(request,  id,  slug):
        post  =  get_object_or_404(Post,  id=id,  slug=slug,  published=True)
        return  render(request,  'blog/post/detail.html',  {'post':  post}) views.py
  • 35. Añadimos URLs para las vistas from  django.conf.urls  import  patterns,  include,  url
 from  django.contrib  import  admin
 from  .views  import  post_list,  post_detail
 
 
 urlpatterns  =  patterns('',
        url(r'^$',  post_list,  name='post_list'),
        url(r'^(?P<category_slug>[-­‐w]+)/$',  post_list,  name='post_list_by_category'),
        url(r'^(?P<id>d+)/(?P<slug>[-­‐w]+)/$',  post_detail,  name='post_detail'),        
 )   urls.py
  • 36. Añadimos nuestras URLs al proyecto from  django.conf.urls  import  patterns,  include,  url
 from  django.contrib  import  admin
 
 
 urlpatterns  =  patterns('',
        url(r'^admin/',  include(admin.site.urls)),
        url(r'^',  include('blog.urls')),
 )   urls.py
  • 37. Creamos una plantilla base {%  load  static  %}
 <!DOCTYPE  html>
 <html>
 <head>
        <title>{%  block  title  %}{%  endblock  %}</title>
        <link  href="{%  static  "css/blog.css"  %}"  rel="stylesheet">
 </head>
 
 <body>
        <div  class="content">
                {%  block  content  %}
                {%  endblock  %}
        </div>
 </body>
 </html>   base.html
  • 38. Plantilla de listado de posts A{%  extends  "blog/base.html"  %}
 
 {%  block  title  %}
        {%  if  category  %}{{  category.title  }}{%  else  %}Mi  blog{%  endif  %}
 {%  endblock  %}   {%  block  content  %}
        <h1>{%  if  category  %}Posts  de  {{  category.title  }}{%  else  %}Mi  blog{%  endif  %}</h1>
        {%  for  post  in  posts  %}
                <h2><a  href="{%  url  "blog:post_detail"  post.id  post.slug  %}">{{  post.title  }}</ a></h2>
                <p  class="date">
                        Publicado  el  {{  post.published_date|date:"d  de  M.  Y"  }}  por   {{  post.author.name  }}  en  
                        <a  href="{%  url  "blog:post_list_by_category"  post.category.slug   %}">{{  post.category  }}</a>
                </p>
                {{  post.content|truncatewords:30|linebreaks  }}
        {%  endfor  %}
 {%  endblock  %}   post/list.html
  • 39. Plantilla de detalle de post A {%  extends  "blog/base.html"  %}   {%  block  title  %}{{  post.title  }}{%  endblock  %}
 
 {%  block  content  %}
        <h1>{{  post.title  }}</h1>
        <p  class="date">
                        Publicado  el  {{  post.published_date|date:"d  de  M.  Y"  }}  por   {{  post.author.name  }}  en  
                        <a  href="{%  url  "blog:post_list_by_category"  post.category.slug   %}">{{  post.category  }}</a>
                </p>
        {{  post.content|linebreaks  }}
 {%  endblock  %}   post/detail.html
  • 40. ¡Nuestro primer blog con Django!