Django permette di costruire automaticamente l'amministrazione dell'applicazione, ovvero una applicazione che permette ad utenti autorizzati di gestire i contenuti del sito.
Perché l'interfaccia di amministrazione sia generata automaticamente, dobbiamo configurare opportunamente Django. Per questo modifichiamo il file miosito/settings.py
aggiungendo django.contrib.admin
alla variabile INSTALLED_APPS
in modo da abilitare l'applicazione admin.
Poi applichiamo la modifica e lasciamo che Django aggiunga le tabelle per questa nuova applicazione:
python manage.py syncdb
Ora modifichiamo urls.py
e togliamo il commento dalle direttive:
from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', ... (r'^admin/(.*)', admin.site.root), )
Avviamo il server
manage.py runserver
e, puntando il nostro browser all'indirizzo http://127.0.0.1:8000/admin/
, dovremmo ottenere la pagina di autenticazione.
Accediamo utilizzando username e password del superuser creato durante la fase di installazione (oppure durante la prima sincronizzazione del database). Dovremmo vedere la pagina seguente:
Non c'è traccia della nostra applicazione nell'interfaccia di amministrazione; per fare questo dobbiamo indicare a Django quali oggetti della nostra applicazione vogliamo gestire nell'interfaccia di amministrazione.
Creaimo allora il file admin.py
nella directory app/
della nostra applicazione, avente il seguente contenuto:
from miosito.app.models import Oggetto from django.contrib import admin admin.site.register(Oggetto)
Questo indica a Django che desideriamo gestire gli oggetti di tipo Oggetto
mediante l'interfaccia di amministrazione e il framework automaticamente aggiunge una sezione app
alla pagina principale della sezione di amministrazione. Per poter vedere il risultato dell'aggiunta del file admin.py
dobbiamo riavviare il nostro server.
La sezione di amministrazione permette di aggiungere, modificare e cancellare gli oggetti della nostra applicazione.
Possiamo inoltre modificare secondo le nostre esigenze l'insieme degli attributi mostrati da Django per ogni oggetto della nostra applicazione.
Se vogliamo aggiungere l'attributo mioattributo
al form di modifica di Oggetto
dovremmo creare in admin.py
la classe:
class OggettoAdmin(admin.ModelAdmin): fields=['mioattributo']
e sostituire l'istruzione admin.site.register(Oggetto)
con:
admin.site.register(Oggetto, OggettoAdmin)
Possiamo inoltre gestire le relazioni tra oggetti, vediamo come. Supponiamo che Oggetto
sia legato da una relazione 1-a-n
con AltroOggetto
, allora registrando AltroOggetto
nell'interfaccia di amministrazione, mediante
admin.site.register(AltroOggetto)
viene aggiunto un nuovo oggetto nell'indice dell'interfaccia di amministrazione e nella form di aggiunta di AltroOggetto
appare una select per impostare a quale istanza di Oggetto
il nuovo item è associato.
Possiamo personalizzare lo stile dell'interfaccia di amministrazione, in modo, ad esempio, da renderla omogenea con lo stile dell'intera web application.
Come abbiamo imparato nel capitolo sui Template, modifichiamo miosito/settings.py
ed aggiungiamo alla variabile TEMPLATE_DIRS
il percorso completo alla directory contenente i Template della nostra applicazione.
Aggiungiamo ora la sottodirectory admin
alla directory principale, tale directory conterrà il template utilizzato da Django per la sezione di amministrazione. Per fare una prova possiamo copiare il template di default utilizzato da Django, base_site.html
, dalla directory django/contrib/admin/templates/
admin alla directory che abbiamo appena creato.
Possiamo ora modificare il file admin/base_site.html
e, ad esempio, sostituire "Django administration" con "MiaApp - sezione amministrazione".
Notiamo che questo template estende il template admin/base.html
, quindi per modificare la struttura dell'interfaccia di amministrazione è necessario copiare tale file nella directory admin
e modificare le varie sezioni.
Per default, l'indice della sezione amministrazione contiene tutte le applicazioni indicate nella variabile INSTALLED_APPS
nel file settings.py
; ma potremmo aver bisogno invece di mostrare solo alcune applicazioni e non tutte.
Per personalizzare l'indice della sezione amministrazione dobbiamo copiare il template admin/index.html
dalla directory Django indicata precedentemente alla directory admin
in cui abbiamo copiato base_site.html
.
Nel template index.html
è utilizzata la variabile app_list
, contenente la lista delle applicazioni installate. Dobbiamo modificare il valore di questa variabile per ottenere di non visualizzare tutte le applicazioni presenti. Per visualizzare nell'indice solo l'applicazione miaapp dobbiamo eseguire
python manage.py adminindex miaapp
in modo da ottenere una porzione di template da utilizzare index.html
per impostare correttamente il valore di app_list
.