00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.