Diapositivas Django
Diapositivas Django
Diapositivas Django
Django!
Django
Reinhardt
¿Quién usa Django?
Django en
SecurityHub
Django es Python
★ 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
Nace en un entorno periodístico
En la redacción de World Online para crear
aplicaciones web rápidamente con fechas ajustadas
Django sigue el principio
Sigue el patrón MTV
★ 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
Mapeo de URLs global
manage.py
settings.py
Configuración del proyecto
blog/
Aplicación 1
__init__.py
models.py
Modelos de datos
views.py Vistas
urls.py
templates/
URLs de la aplicación
static/
foro/
Aplicación 2
__init__.py
models.py
views.py
urls.py
templates/
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
cd
miweb
python
manage.py
startapp
blog
Arrancamos el servidor de desarrollo
settings.py
INSTALLED_APPS
=
(
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
)
Modelos de datos
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
Sincronizamos la base de datos
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;
COMMIT;
¿Y si ya tengo una base de datos?
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)
Creamos un super-usuario
A views.py
from
django.shortcuts
import
render,
get_object_or_404
from
.models
import
Category,
Post
urls.py
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'),
)
Añadimos nuestras URLs al proyecto
urlpatterns
=
patterns('',
url(r'^admin/',
include(admin.site.urls)),
url(r'^',
include('blog.urls')),
)
Creamos una plantilla base
<body>
<div
class="content">
{%
block
content
%}
{%
endblock
%}
</div>
</body>
</html>
Plantilla de listado de posts
A post/detail.html
{%
extends
"blog/base.html"
%}