Configurazione (settings.py)
Il file settings.py contiene tutte le impostazioni di configurazione di un progetto Django. Comprendere ogni sezione ti permette di personalizzare il comportamento dellâapplicazione, gestire la sicurezza e preparare il progetto per il deployment in produzione.
DEBUG e ModalitĂ di Sviluppo
La variabile DEBUG controlla se il progetto è in modalità sviluppo:
# True in sviluppo, False in produzione
DEBUG = True
Con DEBUG = True, Django mostra pagine di errore dettagliate. In produzione deve essere sempre impostato su False per evitare di esporre informazioni sensibili.
SECRET_KEY
La chiave segreta è usata per operazioni crittografiche come la firma dei cookie di sessione:
SECRET_KEY = 'django-insecure-chiave-generata-automaticamente'
In produzione, non inserire mai la chiave segreta direttamente nel codice. Utilizza variabili dâambiente:
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
ALLOWED_HOSTS
Definisce i nomi di dominio e gli indirizzi IP da cui il sito può essere servito:
# In sviluppo
ALLOWED_HOSTS = []
# In produzione
ALLOWED_HOSTS = ['miosito.com', 'www.miosito.com', '192.168.1.100']
Quando DEBUG = False, questa lista non può essere vuota.
INSTALLED_APPS
Elenco di tutte le applicazioni attive nel progetto:
INSTALLED_APPS = [
# App predefinite di Django
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# App di terze parti
'rest_framework',
'debug_toolbar',
# App del progetto
'blog.apps.BlogConfig',
'utenti.apps.UtentiConfig',
]
Lâordine delle app conta: Django le carica dallâalto verso il basso. Le app del progetto vanno in fondo per poter sovrascrivere template delle app di terze parti.
DATABASES
Configurazione della connessione al database. Per impostazione predefinita, Django usa SQLite:
# SQLite (predefinito)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mio_database',
'USER': 'mio_utente',
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': 'localhost',
'PORT': '5432',
}
}
Django supporta anche MySQL, MariaDB e Oracle come backend.
TEMPLATES
Configurazione del sistema di template:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
DIRS specifica le directory dove cercare i template globali. APP_DIRS = True permette a Django di cercare template nella cartella templates/ di ogni app.
File Statici e Media
I file statici (CSS, JavaScript, immagini) e i file media (upload degli utenti) richiedono configurazioni separate:
# File statici
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_ROOT = BASE_DIR / 'staticfiles'
# File media (upload utenti)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
Fuso Orario e Lingua
LANGUAGE_CODE = 'it-it'
TIME_ZONE = 'Europe/Rome'
USE_I18N = True
USE_TZ = True
USE_TZ = True abilita il supporto ai fusi orari, memorizzando le date in UTC nel database.
Variabili dâAmbiente per i Segreti
Non inserire mai credenziali direttamente in settings.py. Usa il pacchetto python-dotenv o django-environ:
pip install python-dotenv
Crea un file .env nella root del progetto:
DJANGO_SECRET_KEY=la-tua-chiave-segreta-qui
DB_PASSWORD=password-sicura
DEBUG=True
Carica le variabili nel settings.py:
from dotenv import load_dotenv
import os
load_dotenv()
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
DEBUG = os.environ.get('DEBUG', 'False') == 'True'
Aggiungi .env al file .gitignore per non includere i segreti nel repository.
Conclusione
Il file settings.py è il centro di controllo del progetto Django. Gestire correttamente le impostazioni di sicurezza, database e file statici è essenziale sia in fase di sviluppo che di deployment. Lâuso di variabili dâambiente per i dati sensibili rappresenta una best practice imprescindibile per qualsiasi progetto professionale.