Come abbiamo accennato, nella filosofia di Django tutte le applicazioni esistono all'interno di un unico "sito". Questo significa che le applicazioni ereditano le impostazioni fondamentali, come il collegamento con il database contenente tutti i model utilizzati nelle applicazioni gestite dal sito e gli URL relativi a tutte le applicazioni del sito.
Abbiamo visto che, quando creiamo un nuovo progetto e una applicazione, vengono generate automaticamente le relative cartelle. Ora iniziamo ad esaminare la struttura dei file di configurazione che queste cartelle contengono.
Il primo file che esaminiamo è settings.py
, che contiene tutti gli elementi della configurazione del sito, poi accenniamo al funzionamento di urls.py
per la gestione degli URL.
Database
La prima cosa da fare è impostare le coordinate del database. Il database è lo stesso per tutto il sito e le tabelle hanno come prefisso il nome dell'applicazione a cui si riferiscono.
Troviamo il blocco di impostazioni relative al db proprio all'inizio del file di configurazione. Qui possiamo indicare:
- Il tipo di database (
DATABASE_ENGINE
), nel nostro caso abbiamo scelto di utilizzare MySQL, ma aprendo il file, i commenti ci ricordano che possiamo servirci anche di altri motori relazionali, dal più leggero SQLite ai più professionali Oracle e PostgreSQL. - Il nome del database (
DATABASE_NAME
) contente i model utilizzati da tutte le applicazioni gestite dal sito Django (in seguito creeremo il db 'rubrica
') - Il nome utente (
DATABASE_USER
), che Django utilizza per accedere al database e che per questo deve avere i privilegi di read/write sul database indicato inDATABASE_NAME
(nel nostro esempio utilizziamo 'root
') - La password (
DATABASE_PASSWORD
), utilizzata per l'autenticazione dell'utente (nel nostro caso 'test
') - L'indirizzo IP del server (
DATABASE_HOST
), su cui il database server è in ascolto. Utilizziamolocalhost
se il DBMS e Django sono in esecuzione sullo stesso server - La porta (
DATABASE_PORT
), su cui è in ascolto il DBMS. Ad esempio la porta di default di MySQL è3306
Applicazioni
In settings.py
è possibile indicare a Django le applicazioni da gestire.
Troviamo la definizione di INSTALLED_APPS
: tale parametro è definito da una tupla contenente un elemento per ogni applicazione gestita da Django. Ogni elemento è una stringa avente la notazione di un package Python:
<nome sito>.<nome applicazione>
Se abbiamo il sito miosito
e l'applicazione app
la stringa diventa:
miosito.app
Nel file troviamo alcune applicazioni predefinite da Django, utili alla gestione del sistema:
django.contrib.auth
- un sistema di autenticazionedjango.contrib.contenttypes
- un framework che definisce i content typesdjango.contrib.sessions
- un framework per la gestione delle sessionidjango.contrib.sites
- un framework per la gestione di più siti mediante una sola installazione Django
Alle applicazioni Django presenti di default possiamo aggiungere le nostre applicazioni. Ogni volta che aggiungiamo una nuova applicazione dobbiamo riavviare Django in modo che importi nel database i model della nuova applicazione.
Template
Possiamo configurare Django in modo da utilizzare i template definiti dalla nostra applicazione. Per fare questo troviamo in settings.py
la definizione del parametro TEMPLATE_DIRS
. Tale parametro è definito da una tupla in cui ogni elemento è una stringa contenente il path assoluto di una directory contenente i template utilizzati dall'installazione Django.
Url Rewrite
Il file urls.py
contiene il mapping tra gli URL e le view definite. Nelle prossime lezioni presenteremo nel dettaglio le views, intanto esaminiamo la configurazione degli URL.
Troviamo la definizione del parametro urlpatterns
: tale parametro contiene una tupla per ogni URL che vogliamo definire, in cui:
- il primo elemento contiene un'espressione regolare che rappresenta un insieme di URL
- il secondo elemento contiene la view (in notazione Python) associata all'URL
Esempio di associazione url - view
(r'^admin/(.*)', admin.site.root)
La r
che precede l'espressione regolare indica che la stringa è di tipo raw
. Le stringhe raw non vengono interpretate da Python, quindi non è necessario inserire i caratteri di escape prima dei caratteri speciali (ad esempio /
).
L'indicazione dell'URL mediante espressione regolare permette di riconoscere un insieme di URL con una sola tupla e, come vedremo in seguito, passare dei valori ai parametri della view associata.