In questo post tento di riassumere (nella maniera piu’ semplice possibile) i passi che ho seguito per creare il primo progetto con django. Da non sviluppatore e abbastanza ignorante nel campo dei linguaggi di programmazione se dovessi definire django con un aggettivo direi: disarmante!
Si ispira al principio DRY (Don’t Repeat Yourself) e la migliore definizione di django che ho trovato è quella fornita da Marco Beri nel suo ottimo libro “Sviluppare applicazioni web con django”: “Django è un ottimo tavolo da lavoro, con tanto di strumenti, per costruire siti dinamici e applicazioni web“. E io aggiungo: le “gambe” del tavolo sono costituite da Python!
Utilizzando Debian troviamo django già pacchettizzato. Purtroppo la versione disponibile non è la piu’ recente; ma basta scaricare i sorgenti dal sito http://www.djangoproject.com/download/ e seguire i 3 (anzi 4) semplici passi indicati:
– si scarica;
– si decomprime il tar.gz;
– ci si sposta nella directory ottenuta dalla decompressione;
– si “suda” per installare il pacchetto: fatto!
E qui comincia il bello. Andiamo per fasi (step):
– si crea una directory di lavoro (la possiamo creare nella nostra home; poi vedremo come fare per renderla visibile al server web).
$ mkdir django_work
– ci spostiamo nella directory creata:
$ cd django_work
– richiamiamo il modulo per la creazione del “progetto” (con django si crea prima un “progetto” e poi “n” applicazioni. C’è molta documentazione in rete che riguarda la strutturazione del framewok):
$ django-admin startproject energia
Questo comando genera nella directory corrente una sottodirectory che ha il nome del progetto indicato (nel nostro caso “energia”) che contiene alcuni file: __init__.py, manage.py, settings.py, e urls.py
NB: con l’installazione di django è stato installato anche un server web (diciamo “provvisorio”) utilissimo per fare i test durante la creazione e implementazione del progetto. Questo server si avvia mediante il comando:
$ python manage.py runserver
Se tutto è ok compare un messaggio simile a questo:
Validating models…
0 errors found….. ecc
Quit the server with CTRL-C.
– Modificare il file settings.py e indicare i parametri alla voce “DATABASES“:
‘ENGINE’: ‘postgresql_psycopg2″ (se si usa database Posgresql)
‘NAME’: ‘energia’ (il db si puo’ creare dopo; l’importante è dare questo nome :-))
‘USER’: ‘sit’ (il proprietario del db creato)
‘HOST’: ‘localhost’
‘PORT’: ” (lasciare in bianco per assumere la porta configurata di default)
– Creare il nuovo database (con lo stesso nome indicato del file “settings.py“). PS: in questo post si assume di lavorare con DB Postgresql; per altre configurazioni (sqlite, mysql,…) vedere la ricca documentazione che si puo’ trovare in rete.
$ su
# su postgres
# psql
# CREATE DATABASE energia OWNER sit;
– lanciare il webserver (quello ausiliario fornito da django con il solo scopo di testare lo sviluppo dell’applicazione) posizionandosi all’interno della directory di lavoro.
$ ./manage.py runserver oppure
$ python manage.py runserver
Deve comparire un messaggio di “0 errors“.
– Puntare il browser alla pagina http://localhost:8000/
dovremmo ottenere una pagina con scritto “IT WORKED…..”
– Creare l’applicazione che chiameremo “manager“:
$ ./manager.py startapp manager
In questo modo viene creata la directory “manager”.
– Definire le tabelle del DB mediante il file “models.py“: le tabelle sono definite come classi python (vedi il tutorial on line)
– L’applicazione nuova chiamata “manager” deve essere attivata modificando il file “…../django_work/energia/settings.py” ed inserendo la voce ‘energia.manager’ nella sezione “INSTALLED_APPS“
– Per applicare il modello appena definito cioé costruire la struttura del database lanciare il comando:
$ ./manage.py syncdb
Compare una sequenza di messaggi che indicano l’avvenuta creazione di alcune tabelle (comprese quelle di autenticazione) in quanto previste tra le “INSTALLED_APPS” del file “settings.py” (‘django.contrib.auth‘). Installando l’auth system viene chiesto se si vuole creare un superuser. Rispondere “yes“: viene proposto l’utente attivo. Dare” yes” e immettere un indirizzo e-mail e una password (l’email non è indispensabile).
– A questo punto si puo’ procedere al popolamento della/e tabella/e del db. Il tutorial propone di usare la shell di django ma si puo’ fare benissimo con vari client (io ho usato phppgadmin per Postgresql).
– Creazione delle “view“: si tratta delle viste ossia come devono essere presentati i dati. Prima di farlo definiamo gli URl delle varie pagine editando il file “…/django_work/energia/urls.py“.
Questi pattern associano le espressioni regolari ad un modulo python.
Le view vengono definite nel file “…/django_work/energia/manager/views.py” (sono tipiche dell'”applicazione”). Nelle view definite si fa riferimento a determinati template (file HTML).
– Definire la variabile ‘TEMPLATES_DIRS‘ all’interno del file “settings.py“
Esempio: ABSOLUTE_PATH + ‘/home/sit/django_work/energia/manager/templates’
– Creare una directory “templates” all’interno di “manager” e procedere alla creazione dei template (base.html, index.html,…). Per una descrizione più dettagliata sui template si rimanda al tutorial on-line.
Supposto che tutto sia ok si puo’ passare alla pubblicazione vera e propria del nostro lavoro. Ricordiamoci che fino ad ora abbiamo lavorato “in casa” usando il server web ausiliario gentilmente offerto da django. Ma se dobbiamo “uscire” nel mondo dobbiamo usare un “vero” server web. Qui facciamo riferimento ad Apache.
– Nel file “settings.py” nella sezione “DATABASES” verificare che la voce ‘HOST‘ sia impostata a ‘localhost’.
– Modificare il file di configurazione di Apache che si trova in (debian :-)) “/etc/apache2/apache2.conf” aggiungendo:
<Location “/energia/”>
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE energia.settings
PythonPath “[‘/home/sit/django_wotk/’,’/home/sit/django_work/energia/’] + sys.path”
PythonOption django.root /energia
PythonDebug On
</Location>
<Location “/media”>
SetHandler None
</Location>
Alias /media /home/sit/src/Django-1.2.1/django/contrib/main/admin/media
Quest’ultimo alias è necessario per caricare i file CSS, JS (modificare i template HTML inserendo “/energia/” a monte di ogni HREF).
NB: ricordarsi di riavviare il server web dopo ogni modifica:
# /etc/init.d/apache2 restart
Spero sia tutto corretto. Commenti benvenuti.