Django viene con muchas aplicaciones reutilizables directamente añadidas al core o a la version de distribucion, entre una de ellas, de echo la mas utilizada, es la de administracion "django.contrib.admin".
El admin de django te permite tener una interfaz administrativa para tus modelos, el unico requisito es que las registres,a continuacion recrearemos una pequeña aplicacion un todo manager.
Para habilitar el admin, debemos añadirlo a nuestro settings.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'todomanager', # nuestra aplicacion que vamos a crear mas adelante
)
Sobre el proyecto hola mundo ahora crearemos una nueva aplicacion que se llame todomanager:
#./admin.py start-app todomanager
Django nos crea el models.py y views.py por defecto en el nuevo directorio de nuestra aplicacion que lleva el mismo nombre.
Abrimos el models.py y editamos creando nuestros modelos, nuestro models.py deberia quedar algo asi:
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User #django nos provee otra aplicacion que maneja la autenticacion, de el usaremos el modelo User
from datetime import datetime
class Todo(models.Model):
HIGH = 3
MEDIUM = 2
LOW = 1
CHOICES_PRIORITY =(
(HIGH, _('High')),
(MEDIUM, _('Medium')),
(LOW, _('Low'))
)
COMPLETED = 1
TBD =2
CHOICES_STATUS=(
(COMPLETED, _('Completed')),
(TBD, _('To be Done'))
)
owner = models.ForeignKey(User, related_name='owner_group', verbose_name=_('owner'))
name = models.CharField(_('name'), max_length=32)
created_date=models.DateTimeField(default=datetime.now)
priority = models.IntegerField(_('priority'), choices=CHOICES_PRIORITY)
status = models.IntegerField(_('status'), choices=CHOICES_STATUS)
description = models.TextField(_('description'))
due_date = models.DateField(_('due_date'),blank=True,null=True,)
completed_date = models.DateField(_('completed_date'),blank=True,null=True)
class Meta:
ordering = ('created_date','priority')
verbose_name = _('Todo')
verbose_name_plural = _('Todo List')
unique_together = ("owner", "name")
get_latest_by = 'created_date'
def __unicode__(self):
return self.name
Para que nuestro modelo pueda ser tomado en cuenta por el admin de django debemos registrarlo, dentro de nuestra aplicacion creamos el archivo admin.py y lo minimo requerido para registrarlo seria tener lo siguiente en nuestro archivo:
from django.contrib import admin
from models import Todo
admin.site.register(Todo) # aca registramosnuestro modelo
Ahora nos toca generar la base de datos:
./admin.py syncdb
Como es la primera vez nos pedira registremos las credenciales de nuestro usuario administrador (dile yes :P).
Para habilitar completamente las interfaz administrativa debemos editar el urls.py de nuestro proyecto y tener algo como sigue:
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/(.*)', admin.site.root),
)
Ahora podemos hacer correr nuestro proyecto con:
#./manage.py runserver 0.0.0.0:8000
Ahora nos vamos al browser y colocamos:
http://127.0.0.1:8000/admin
Usando las credenciales que registramos al realizar el sync de bd ingresamos al sitio de administracion de djano.
En un siguiente post veremos como poder hacer mas rica y como tambien veremos como se puede sobreescribir y darle mas funcionalidad a esta interfaz que nos provee django.
Sin duda esta caracteristica de django es la que atrae a muchos, ya que en la mayoria de las aplicaciones que realizamos siempr necesitamos tener esta interfaz administrativa, aunque existen muchas cosas que se estan mejorando aun, no cabe duda que el admin de django nos ahorrara mucho trabajo.
Palabras clave: admin, django