
Introduzione
Benvenuto nella prima guida della rubrica TechPills per tutti, dove semplifichiamo concetti e strumenti tecnologici per metterti in condizione di sviluppare subito qualcosa di concreto. Oggi esploreremo Django, uno dei framework web più popolari e potenti nel mondo Python. Alla fine di questo articolo, avrai un progetto Django funzionante, pronto per essere sviluppato ulteriormente o personalizzato.
Obiettivi dell’articolo:
- Spiegare i concetti di base di un ambiente di sviluppo Python.
- Guidarti nell’installazione di Django e nella creazione di un primo progetto.
- Presentare la struttura di un progetto Django e come avviare il server di sviluppo.
Cosa ti serve per iniziare:
- Conoscenza base di Python.
- Un computer con Python già installato.
Sei pronto? Immergiamoci in Django!
Cos’è Django?
Django è un framework web open source scritto in Python, progettato per semplificare e velocizzare lo sviluppo di applicazioni web complesse. Grazie alla sua architettura MVC (Model-View-Controller) e al principio DRY (Don’t Repeat Yourself), è una delle scelte preferite sia dai principianti che dagli sviluppatori esperti.
Caratteristiche principali
- Velocità di sviluppo: Grazie a strumenti integrati, puoi costruire prototipi e applicazioni complete in tempi record.
- Sicurezza: il framework fissa dei confini e questo aiuta gli sviluppatori a evitare molti errori di sicurezza comuni.
- Batteries Included: Include tutto il necessario per creare applicazioni web, come autenticazione, gestione database, e interfacce amministrative.
- Grande community: Essendo uno dei framework più usati, offre una documentazione eccellente e supporto della community.
Introduzione ai Virtual Environment: Una base solida per il tuo progetto Django
Un ambiente virtuale (venv) è uno strumento fondamentale per isolare le dipendenze di un progetto Python. Ti consente di:
- Gestire versioni diverse di Python e delle librerie necessarie al progetto.
- Evitare conflitti tra le dipendenze di progetti diversi, garantendo che ogni progetto abbia il proprio ecosistema.
Con un ambiente virtuale, il tuo progetto Django rimarrà indipendente e più semplice da mantenere.
Caratteristiche di un ambiente virtuale
Un ambiente virtuale ha le seguenti caratteristiche principali:
- Contiene un interprete Python specifico, insieme alle librerie e ai binari necessari per supportare un progetto (applicazione o libreria). Questi sono isolati di default da altri ambienti virtuali e dalle librerie Python installate nel sistema operativo.
- Si trova in una directory dedicata, convenzionalmente chiamata .venv o venv nella directory del progetto.
- Non viene incluso nei sistemi di version control (come Git), poiché è considerato un ambiente temporaneo.
- È considerato eliminabile: dovrebbe essere semplice da cancellare e ricreare da zero. Non è previsto che tu inserisca codice del progetto all’interno dell’ambiente virtuale.
- Non è spostabile o copiabile: in caso di necessità di spostare il progetto, si ricrea l’ambiente virtuale nella nuova posizione.
Preparazione dell’ambiente
Installazione di Python
Assicurati di avere Python 3.10 o superiore installato sul tuo sistema. Puoi verificarlo con il comando:
python --version
oppure
python3 --version
Se Python non è installato, scaricalo dal sito ufficiale: https://www.python.org.
Creazione e attivazione di un ambiente virtuale
Crea la directory per i tuoi progetti dove preferisci, entraci all’interno e crea il tuo ambiente virtuale, seguendo questi passaggi:
Crea un virtual environment:
python3 -m venv venv
- Questo creerà una directory chiamata venv nel tuo progetto.
- Attiva l’ambiente virtuale:
- Mac/Linux:
source venv/bin/activate
- Windows:
venv\Scripts\activate
- Mac/Linux:
- Conferma l’attivazione: Quando l’ambiente virtuale è attivo, dovresti vedere il prefisso (venv) prima del prompt della shell.
Per disattivare l’ambiente virtuale: deactivate
Installeremo Django ed altri eventuali pacchetti attraverso pip
Cos’è pip?
pip è il gestore di pacchetti ufficiale per Python. Ti consente di installare, aggiornare e gestire librerie e pacchetti Python che possono essere utilizzati nei tuoi progetti.
Caratteristiche principali di pip
- Installazione di pacchetti: Puoi installare librerie da PyPI, il repository ufficiale di pacchetti Python.
pip install nome_pacchetto
- Aggiornamento di pacchetti: Puoi mantenere le tue librerie aggiornate con:
pip install --upgrade nome_pacchetto
- Disinstallazione di pacchetti: Puoi rimuovere un pacchetto non più necessario con:
pip uninstall nome_pacchetto
- Elenco dei pacchetti installati: Puoi vedere tutti i pacchetti attualmente installati nel tuo ambiente con:
pip list
- Congelamento delle dipendenze: Con il comando pip freeze, puoi salvare tutte le librerie installate e le loro versioni in un file requirements.txt, utile per condividere o replicare l’ambiente di sviluppo.
pip freeze > requirements.txt
- Installazione di dipendenze da pip: Puoi installare tutte le dipendenze direttamente dal file
requirements.txt
tramitepip install -r requirements.txt
Perché utilizzare pip?
- Facilità d’uso: Pip è semplice e diretto da usare, ideale sia per principianti che per esperti.
- Ampia compatibilità: È compatibile con la maggior parte dei pacchetti Python.
- Essenziale per gli ambienti virtuali: Con pip, puoi gestire librerie specifiche per un progetto senza influenzare il sistema globale.
Con pip, la gestione delle dipendenze diventa semplice e organizzata, garantendo che il tuo progetto abbia sempre accesso ai pacchetti necessari.
Installazione di Django
Con l’ambiente virtuale attivo, installa Django usando pip
:
pip install django
Verifica l’installazione:
python3 -m django --version
oppure
django-admin --version
Se tutto è andato a buon fine, vedrai la versione di Django installata.
Nota: Assicurati di installare Django all’interno del virtual environment, altrimenti non sarà disponibile per il progetto corrente.
Creare il primo progetto Django
Generazione del progetto
Usa il comando django-admin per creare un nuovo progetto:
django-admin startproject nome_progetto
Questo comando genera una struttura di base per il tuo progetto, organizzata come segue:
nome_progetto/
├── nome_progetto/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Creare un’app Django
Django utilizza un’architettura basata su app, dove ogni funzionalità o componente può essere sviluppato come modulo separato. Creiamo una nuova app nel nostro progetto.
Generazione dell’app Esegui il seguente comando nella directory del tuo progetto:python manage.py startapp nome_app
Struttura dell’app generata Il comando precedente creerà una nuova directory nome_app/
con la seguente struttura:
nome_app/
├── admin.py
├── apps.py
├── init.py
├── migrations/
│ └── init.py
├── models.py
├── tests.py
└── views.py
Registrazione dell’app Per rendere l’app riconosciuta dal progetto Django, apri il file settings.py
nella directory del progetto e aggiungi il nome dell’app alla lista INSTALLED_APPS
:
INSTALLED_APPS = [
…
'nome_app',
]
Code language: JavaScript (javascript)
Struttura dei file principali
- manage.py: Ti permette di avviare il server di sviluppo, gestire migrazioni e svolgere altre operazioni amministrative per il tuo progetto.
- settings.py: Contiene le configurazioni principali (database, app installate, fuso orario, ecc.) che determinano il funzionamento dell’applicazione.
- urls.py: Mappa i vari indirizzi (URL) del sito alle loro relative viste (view) o funzioni, definendo la “struttura” di navigazione dell’app.
- asgi.py e wsgi.py: Sono i punti di ingresso per eseguire l’app in ambienti di produzione:
- WSGI è il protocollo “standard” supportato dalla maggior parte dei server.
- ASGI permette di gestire app asincrone, utile per funzionalità in tempo reale.
Avvio del server di sviluppo
Con la struttura del progetto pronta, bisogna prima fare le migrazioni con:
python manage.py migrate
Code language: CSS (css)
puoi avviare il server di sviluppo con:
python manage.py runserver
Code language: CSS (css)
Vedrai un messaggio come questo:
Starting development server at http://127.0.0.1:8000/
Code language: JavaScript (javascript)
Visualizza la tua applicazione
Apri un browser e visita http://127.0.0.1:8000. Se tutto funziona, vedrai la pagina predefinita di Django con il messaggio: “The install worked successfully! Congratulations!”.

Consiglio: Se la porta 8000 è già occupata, puoi cambiarla con:
python manage.py runserver 8080
Code language: CSS (css)
Personalizzazione: Aggiungere una View e un URL
Per rendere la tua applicazione più interessante, aggiungiamo una view personalizzata. Apri il file views.py
Esempio: “Hello, World!”
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("Ciao dal tuo primo progetto Django!")
Code language: JavaScript (javascript)
Poi, modifica il file urls.py
della directory del progetto per includere le URL della tua app:
from django.urls import path, include
urlpatterns = [
path('', include('nome_app.urls')),
]
Code language: JavaScript (javascript)
Crea un file urls.py
nella directory della tua app con il seguente contenuto:
from django.urls import path
from . import views
urlpatterns = [
path('', views.hello_world, name='home'),
]
Code language: JavaScript (javascript)
Ricarica la pagina nel browser: ora vedrai il messaggio personalizzato “Ciao dal tuo primo progetto Django!”.

Conclusioni e prossimi passi
In questa guida abbiamo coperto:
- Creazione di un ambiente virtuale.
- Installazione di Django.
- Generazione del primo progetto.
- Avvio del server e creazione di una view personalizzata.
Tips & Tricks
Gestione delle dipendenze
La gestione delle dipendenze è fondamentale per garantire che il tuo progetto sia riproducibile e isolato. Utilizzando un virtual environment, puoi installare librerie specifiche solo per quel progetto.
Per documentare tutte le dipendenze attuali del tuo progetto, salva la lista delle librerie installate in un file chiamato requirements.txt
:
pip freeze > requirements.txt
Code language: CSS (css)
Questo file è particolarmente utile nei seguenti scenari:
- Condivisione del progetto: Chiunque collabori al tuo progetto potrà ricreare facilmente lo stesso ambiente eseguendo:
pip install -r requirements.txt
- Deployment: In ambienti di produzione, il file requirements.txt garantisce che tutte le librerie necessarie siano installate nella versione corretta.
- Backup delle dipendenze: Se devi ricreare l’ambiente virtuale da zero, il file requirements.txt ti consente di reinstallare rapidamente tutte le librerie.
Gestire le dipendenze in questo modo evita conflitti e garantisce che il tuo codice funzioni come previsto, indipendentemente dall’ambiente in cui viene eseguito.
Problemi comuni e soluzioni
- Errore: Porta 8000 già in uso
Soluzione: Cambia porta con python manage.py runserver 8080.
- Errore: django-admin non trovato
Soluzione: Assicurati che l’ambiente virtuale sia attivo.
Approfondimenti avanzati
Le migrazioni in Django
Cosa sono le migrazioni?
Le migrazioni sono file che descrivono le modifiche apportate ai tuoi model (ovvero le strutture dati che rappresentano le tabelle del database). Django le utilizza per “trasferire” in modo sicuro le modifiche nel tuo database. Ogni volta che aggiorni i tuoi modelli—ad esempio aggiungendo un nuovo campo o creando una nuova tabella—le migrazioni tengono traccia di questi cambiamenti, così da poterli applicare senza perdere i dati esistenti.
Come funzionano?
- Modifichi i tuoi model: ad esempio, aggiungi una nuova classe o un nuovo campo.
- Generi le migrazioni: con il comando
python manage.py makemigrations
- Django esamina i tuoi modelli e crea o aggiorna i file di migrazione relativi alle modifiche apportate.
- Applichi le migrazioni: con il comando
python manage.py migrate
- Django traduce i file di migrazione in istruzioni SQL da eseguire sul tuo database, allineando la struttura delle tabelle ai nuovi modelli.
Perché sono utili?
- Versionamento del database: ogni modifica ai modelli è tracciata da un file di migrazione. Se lavori in team, questo permette a tutti di aggiornare la propria struttura dati in modo coerente.
- Sicurezza dei dati: Django cerca di applicare cambiamenti senza perdere o corrompere i dati esistenti.
- Processo semplificato: non devi scrivere direttamente le istruzioni SQL; Django si occupa di creare e gestire le query necessarie al tuo database.
Consigli pratici
- Esegui i comandi
makemigrations
emigrate
ogni volta che modifichi i tuoi modelli, così sarai sicuro che il tuo database rifletta sempre i cambiamenti. - Includi i file di migrazione nel tuo controllo di versione (ad esempio Git), in modo che chiunque utilizzi il progetto possa applicare le stesse modifiche.
- Non modificare manualmente i file di migrazione a meno che tu non sappia esattamente cosa stai facendo: è molto più sicuro lasciare che Django li gestisca per conto tuo.
Configurazioni iniziali di Django
Una volta creato il tuo progetto, ci sono alcune configurazioni iniziali che potresti voler eseguire per personalizzare il comportamento del framework:
- Modifica della lingua e del fuso orario: Django utilizza di default l’inglese e il fuso orario UTC. Per cambiare queste impostazioni, modifica
settings.py
:LANGUAGE_CODE = 'it-it'
TIME_ZONE = 'Europe/Rome' - Configurazione del database: Django utilizza SQLite di default, ma puoi configurare altri database come PostgreSQL o MySQL. Ad esempio, per PostgreSQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'nome_database',
'USER': 'utente',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
Code language: JavaScript (javascript)
- Creazione di una chiave segreta sicura: La chiave segreta di Django è generata automaticamente, ma per una maggiore sicurezza in produzione, puoi utilizzare strumenti come python-decouple per gestirla.
Creazione di un file .env con python-decouple
Per una gestione più sicura e organizzata delle configurazioni sensibili (come chiavi segrete, credenziali di database e impostazioni specifiche dell’ambiente), puoi utilizzare la libreria python-decouple. Questa libreria consente di separare i dati sensibili dal codice sorgente, archiviandoli in un file .env.
Installazione di python-decouple
Installa la libreria con il seguente comando:
pip install python-decouple
Creazione del file .env
Nella directory principale del tuo progetto, crea un file chiamato .env e aggiungi le configurazioni necessarie. Ad esempio:
SECRET_KEY=tuachiavesegreta
DEBUG=True
Code language: PHP (php)
Utilizzo del file .env in Django
Modifica il file settings.py per utilizzare le configurazioni dal file .env:
from decouple import config
# Chiave segreta
SECRET_KEY = config('SECRET_KEY')
# Modalità debug
DEBUG = config('DEBUG', default=False, cast=bool)
# Configurazione del database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': config('DATABASE_NAME'),
'USER': config('DATABASE_USER'),
'PASSWORD': config('DATABASE_PASSWORD'),
'HOST': config('DATABASE_HOST', default='localhost'),
'PORT': config('DATABASE_PORT', default='5432'),
}
}
Code language: PHP (php)
Vantaggi dell’utilizzo di .env con python-decouple
- Sicurezza: Le informazioni sensibili non sono più direttamente nel codice sorgente, riducendo il rischio di esposizione accidentale.
- Flessibilità: Puoi utilizzare configurazioni diverse per ambienti diversi (sviluppo, testing, produzione) semplicemente modificando il file .env.
- Pulizia del codice: Il file
settings.py
diventa più leggibile e meno ingombrante.
Assicurati di aggiungere il file .env al file .gitignore
per evitare che venga incluso nei sistemi di version control.
Con queste modifiche, hai configurato correttamente il tuo progetto per gestire in modo sicuro le variabili di ambiente.
Risorse utili
Happy coding!