English version: Django: Building a basic site with Admin
Con todo el rollo de la mudanza me he dado cuenta de que no he escrito ningún artículo sobre Django. Estaba convencido de haberlo hecho. Así que voy a tener que arreglar el problema XDQué es
Django es un framework para la creación de aplicaciones web. Se centra en el backend, ofreciendo plantillas para el frontend, aunque para este último seguramente utilicemos otro framework adicional tipo JQuery, Dojo, Mootools, Prototype, etc.Instalación
Podemos instalarlo utilizando easyinstall, aunque es paquete Debian. Se puede aislar la instalación de un site Django, con el fin de replicarla fácilmente.Creación
Vamos a crear un CMS pequeñito. Va a tener blogs y nada más. Para ello, lo primero será decirle a Django que nos cree el sitio:$ django-admin startproject myblog $ cd myblog $ python manage.py startapp blog $ tree . |-- blog | |-- __init__.py | |-- models.py | |-- tests.py | `-- views.py |-- __init__.py |-- __init__.pyc |-- manage.py |-- settings.py |-- settings.pyc `-- urls.py 1 directory, 10 files $
Antes de seguir, configuraremos la BBDD, modificando el archivo settings.py, en el que indicaremos la BBDD a utilizar. Aprovechamos también para indicar en las aplicaciones instaladas que queremos utilizar "admin" y nuestro nuevo modulo:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'database.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
TEMPLATE_DIRS = (
'/AQUI_VA_UNA_RUTA_ABSOLUTA/'
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'blog',
)
Dejad el resto de entradas como estén.Con esto ya podemos ejecutar el servidor, aunque servirá poco:
$ python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table auth_message Creating table django_content_type Creating table django_session Creating table django_site You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (Leave blank to use 'miguel'): admin E-mail address: admin@example.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... No fixtures found. $ python manage.py runserver Validating models... 0 errors found Django version 1.3, using settings 'myblog.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Y ya podemos abrir el site, que se encuentra en http://127.0.0.1:8000/
El modelo
Editaremos el modelo (blog/models.py), donde estableceremos un modelo muy básico:from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
Como se ve, tendremos un título y un cuerpo. De momento no nos hace falta nada más.URLs
Ahora vamos a modificar el archivo urls.py. Este archivo se utiliza para que django sepa qué debe hacer para cada URL que se le solicita. Por eso trabaja con expresiones regulares, de manera que pueda identificar qué servicio o HTML debe procesar en cada caso. Nosotros necesitamos descomentar las líneas correspondientes a django-admin (archivo 'urls.py'):from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/', 'myblog.blog.views.list'),
)
Administración
Vamos a configurar la herramienta de administración, para poder editar nuestras entradas. Para ello utilizaremos el archivo blog/admin.pyfrom myblog.blog.models import Post from django.contrib import admin admin.site.register(Post)
La vista
En el archivo de URLs indicamos que, ante la URL 'blog/', veríamos 'blog.views.list'. Aún no hemos definido esto, y lo haremos en el archivo 'admin/views.py':
from django.shortcuts import render_to_response
from blog.models import Post
def list(request):
return render_to_response('blog/list.html',
{'post_list': Post.objects.all()})
Con esto acabamos de crear una dependencia: 'blog/list.html'. En este caso, necesitaremos crear una plantilla. Las plantillas no van con nuestro proyecto, sino que las deberíamos poner a parte. Cuando se construye un sitio Django, los módulos van por un lado, cada uno de ellos lo más aislado posible del resto. Si es posible, no deberían tener dependencias entre ellos (si es posible, insisto). Serán las plantillas las que le den homogeneidad y unión a todo el site. En la el archivo 'settings.py' establecimos una ruta para TEMPLATE_DIRS. Ahí es donde crearemos nuestro archivo 'blog/list.html':
Al llamar a nuestra plantilla creamos la variable 'post_list' que estamos recorriendo en la plantilla y pintando de la forma adecuada.
Cómo usarlo
¡¡Ya lo tenemos todo montado!! Ehmmm... y ahora... ¿qué?
Bueno, pues vamos a usarlo. Primero vamos a asegurarnos de que la base de datos está actualizada y vamos a ejecutar el servicio:
$ python manage.py syncdb Creating tables ... Installing custom SQL ... Installing indexes ... No fixtures found. $ python manage.py runserver Validating models... 0 errors found Django version 1.3, using settings 'myblog.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Vale, ya está funcionando. Ahora nos vamos a la URL que nos dice: http://127.0.0.1:8000/, lo que nos dará un bonito error de página no encontrada. Como tenemos habilitado el depurado, vemos lo que ha ocurrido: la URL solicitada no se ajusta a ninguno de los patrones definidos.
Vamos primero con la interfaz de administración: http://127.0.0.1:8000/admin. Nos pedirá contraseña (la que pusimos al hacer el primer syncdb) y entramos en la parte de administrador. Deberíamos ver 3 bloques:
- Auth
- Blog
- Sites
Si es así, es que lo hemos hecho todo bien. Creamos un par de posts en el módulo "Blog". No tiene pérdida.
Toda esta interfaz de administración se ha creado automáticamente gracias a que hemos incorporado "django-admin".
¿Ya tenemos los 2-3 posts? Bien. Vamos ahora a la URL de visualización: http://127.0.0.1:8000/blog. Poco que decir aquí, salvo que deberíamos estar viendo nuestro blog :D
Más información
Evidentemente, el estupendo tutorial de django :D.Despedida
Si veo que tiene tirón, quizá un día de estos continúe este pequeño manual. Hay muchas cosas que se pueden hacer aún:- Paginar las entradas cuando haya muchas.
- Crear una interfaz CRUD para no tener que editar los Posts desde la interfaz de administración, sino desde el propio site.
- Darle color al sitio.
- Añadir Tags a los Posts.
- Ordenar por fecha de publicación.
- Gestionar usuarios.
- Añadir pruebas.
- [Déle rienda suelta a su imaginación y ponga aquí su deseo.]
0 comentarios:
Publicar un comentario en la entrada