SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler 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!
Introducción a Django

Mais conteúdo relacionado

Mais procurados (20)

Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Modelo de prototipo
Modelo de prototipoModelo de prototipo
Modelo de prototipo
 
Triggers en BD mysql
Triggers en BD mysqlTriggers en BD mysql
Triggers en BD mysql
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Integridad en las bases de datos
Integridad en las bases de datosIntegridad en las bases de datos
Integridad en las bases de datos
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 Capas
 
Procedimientos Almacenados SQL SEVER.pptx
Procedimientos Almacenados SQL SEVER.pptxProcedimientos Almacenados SQL SEVER.pptx
Procedimientos Almacenados SQL SEVER.pptx
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios php
 
INTEGRIDAD DE DATOS
INTEGRIDAD DE DATOSINTEGRIDAD DE DATOS
INTEGRIDAD DE DATOS
 
Bd nosql clave valor
Bd nosql clave valorBd nosql clave valor
Bd nosql clave valor
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
UWE
UWEUWE
UWE
 
Capitulo 6 prototipos
Capitulo 6 prototiposCapitulo 6 prototipos
Capitulo 6 prototipos
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura Rest
 
Estudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVAEstudio comparativo de PHP, ASP.NET Y JAVA
Estudio comparativo de PHP, ASP.NET Y JAVA
 
Diagrama de casos de usos
Diagrama de casos de usosDiagrama de casos de usos
Diagrama de casos de usos
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Unidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareUnidad 1 Ingenieria de software
Unidad 1 Ingenieria de software
 
Vistas en SQL
Vistas en SQLVistas en SQL
Vistas en SQL
 

Destaque

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
 

Destaque (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
 

Semelhante a Introducción a Django

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
 
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
 
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
 
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
 

Semelhante a Introducción a Django (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
 
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
 
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
 
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!
 

Mais de 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
 

Mais de 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
 

Último

1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...
1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...
1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...Champs Elysee Roldan
 
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...frank0071
 
Matemáticas Aplicadas usando Python
Matemáticas Aplicadas   usando    PythonMatemáticas Aplicadas   usando    Python
Matemáticas Aplicadas usando PythonErnesto Crespo
 
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALES
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALESLIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALES
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALESGuiseppyCuchilloMira
 
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdf
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdfFrankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdf
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdffrank0071
 
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdfAlthusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdffrank0071
 
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...frank0071
 
Moda colonial de 1810 donde podemos ver las distintas prendas
Moda colonial de 1810 donde podemos ver las distintas prendasModa colonial de 1810 donde podemos ver las distintas prendas
Moda colonial de 1810 donde podemos ver las distintas prendasMorenaVictorero1
 
Ecuaciones Diferenciales de Primer Orden
Ecuaciones Diferenciales de Primer OrdenEcuaciones Diferenciales de Primer Orden
Ecuaciones Diferenciales de Primer OrdenAntonio Guasco
 
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...frank0071
 
hipotalamo hipofisis clase de endocrinología
hipotalamo hipofisis clase de endocrinologíahipotalamo hipofisis clase de endocrinología
hipotalamo hipofisis clase de endocrinologíawaldyGamer
 
Evolución Historica de los mapas antiguos.ppt
Evolución Historica de los mapas antiguos.pptEvolución Historica de los mapas antiguos.ppt
Evolución Historica de los mapas antiguos.pptElizabethLpez634570
 
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWART
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWARTdesequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWART
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWARTfjmn110693
 
Homo Ergaster. Evolución y datos del hominido
Homo Ergaster. Evolución y datos del hominidoHomo Ergaster. Evolución y datos del hominido
Homo Ergaster. Evolución y datos del hominidoMIGUELSANTIAGODORADO
 
PRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptxPRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptxdanimaxi2320
 
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptxEl Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptxangelorihuela4
 
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETC
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETCREINO FUNGI: CONCEPTO, CARACTERISTICAS, ETC
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETCbayolethBarboza
 
La Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vidaLa Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vidaMaraJosQuiroz2
 
Musculos Paraproteticos, protesis, musculos
Musculos Paraproteticos, protesis, musculosMusculos Paraproteticos, protesis, musculos
Musculos Paraproteticos, protesis, musculosCatalinaSezCrdenas
 
Mapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdfMapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdfoliverjverde
 

Último (20)

1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...
1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...
1890 –7 de junio - Henry Marmaduke Harris obtuvo una patente británica (Nº 88...
 
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
 
Matemáticas Aplicadas usando Python
Matemáticas Aplicadas   usando    PythonMatemáticas Aplicadas   usando    Python
Matemáticas Aplicadas usando Python
 
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALES
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALESLIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALES
LIPIDOS y ACIDOS NUCLEICOS Y TODOS SUS SILLARES ESTRUCTURALES
 
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdf
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdfFrankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdf
Frankel, Hermann. - Poesía y filosofía de la Grecia arcaica [ocr] [1993].pdf
 
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdfAlthusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
 
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...
Flores Galindo, A. - La ciudad sumergida. Aristocracia y plebe en Lima, 1760-...
 
Moda colonial de 1810 donde podemos ver las distintas prendas
Moda colonial de 1810 donde podemos ver las distintas prendasModa colonial de 1810 donde podemos ver las distintas prendas
Moda colonial de 1810 donde podemos ver las distintas prendas
 
Ecuaciones Diferenciales de Primer Orden
Ecuaciones Diferenciales de Primer OrdenEcuaciones Diferenciales de Primer Orden
Ecuaciones Diferenciales de Primer Orden
 
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...
Morgado & Rodríguez (eds.) - Los animales en la historia y en la cultura [201...
 
hipotalamo hipofisis clase de endocrinología
hipotalamo hipofisis clase de endocrinologíahipotalamo hipofisis clase de endocrinología
hipotalamo hipofisis clase de endocrinología
 
Evolución Historica de los mapas antiguos.ppt
Evolución Historica de los mapas antiguos.pptEvolución Historica de los mapas antiguos.ppt
Evolución Historica de los mapas antiguos.ppt
 
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWART
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWARTdesequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWART
desequilibrio acido baseEE Y TEORIA ACIDO BASICO DE STEWART
 
Homo Ergaster. Evolución y datos del hominido
Homo Ergaster. Evolución y datos del hominidoHomo Ergaster. Evolución y datos del hominido
Homo Ergaster. Evolución y datos del hominido
 
PRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptxPRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptx
 
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptxEl Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
 
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETC
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETCREINO FUNGI: CONCEPTO, CARACTERISTICAS, ETC
REINO FUNGI: CONCEPTO, CARACTERISTICAS, ETC
 
La Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vidaLa Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vida
 
Musculos Paraproteticos, protesis, musculos
Musculos Paraproteticos, protesis, musculosMusculos Paraproteticos, protesis, musculos
Musculos Paraproteticos, protesis, musculos
 
Mapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdfMapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdf
 

Introducción a Django

  • 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!