Scrivere la tua prima applicazione in Django, parte 1Link to this heading

Impariamo attraverso un esempio.

Durante questa guida, ti accompagneremo attraverso la creazione di una semplice applicazione per sondaggi.

Consisterà di due parti:

  • Un sito pubblico, che permette agli utenti di visualizzare sondaggi e votarli.

  • Un sito amministrativo che ti permette l’aggiunta, modifica ed eliminazione di sondaggi.

Supponiamo che tu abbia già Django installato. Puoi dire che Django sia installato e quale versione sia eseguendo il seguente comando in un prompt della shell (indicato dal prefisso $):

Linux / macOS

Shell
$ python -m django --version

Windows

Windows
...\> py -m django --version

Se Django è installato, dovresti vedere la versione della tua installazione. Se non lo è, riceverai un errore che dice «No module named django».

Questo tutorial è scritto per Django 3.2, che supporta Python 3.6 e successivi. Se la versione di Django non corrisponde, puoi consultare il tutorial per la tua versione di Django usando il selettore di versione nell’angolo in basso a destra della pagina, oppure aggiorna Django alla versione più recente. Se stai usando una versione più vecchia di Python, controlla Che versione di Python posso usare con Django? per trovare una versione compatibile di Django.

Vedi Come installare Django per consigli su come rimuovere vecchie versioni di Django ed installarne una più nuova.

Creare un progettoLink to this heading

Se questa è la prima volta volta che usi Django, dovrai prenderti cura di qualche configurazione iniziale. Specificatamente, dovrai auto-generare del codice che costituisce un progetto Django – una collezione di settaggi per un’instanza di Django, che include configurazione del database, opzioni specifiche per Django e settaggi specifici per l’applicazione.

Dalla linea di comando, cd dentro la directory dove vorresti tenere il tuo codice, poi chiama il seguente comando:

Linux / macOS

Shell
$ django-admin startproject mysite

Windows

Windows
...\> django-admin startproject mysite

Questo creerà una directory mysite nella directrory presente. Se non funziona, consulta Problemi nell’esecuzione di django-admin.

Diamo un’ochiata a cosa startproject ha creato:

Code
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Questi file sono:

  • La directory principale mysite/ è un contenitore per il tuo progetto. Il suo nome non ha importanza per Django; puoi rinominarlo come preferisci.

  • manage.py: Una utility da linea di comando che ti permette di interagire con questo progetto in svariate maniere. Puoi leggere tutti i dettagli a proposito di manage.py in in django-admin and manage.py.

  • La cartella interna mysite/ è il vero pacchetto Python per il tuo progetto. Il suo nome è il nome del pacchetto Python che dovrai usare per importare qualsiasi cosa dall’interno di esso. (es. mysite.urls).

  • mysite/__init__.py: Un file vuoto che indica a Python che questa directory dovrebbe essere considerata un pacchetto Python. Se sei un principiante di Python, leggi ulteriori informazioni sui pacchetti nella documentazione ufficiale di Python.

  • mysite/settings.py: Settaggi/configurazione per questo progetto Django. Django settings ha tutte le informazioni di cui hai bisogno su come funzionano i settaggi.

  • mysite/urls.py: The URL declarations for this Django project; a «table of contents» of your Django-powered site. You can read more about URLs in URL dispatcher.

  • mysite/asgi.py: Un punto di ingresso per i server web compatibili con ASGI per servire il tuo progetto. Vedi How to deploy with ASGI per maggiori dettagli .

  • mysite/wsgi.py: Un punto d’ingresso per web server compatibili con WSGI per servire il tuo progetto. Vedi How to deploy with WSGI per maggiori dettagli.

Il server di sviluppoLink to this heading

Verifichiamo che il tuo progetto in Django funzioni. Entra nella cartella esterna mysite, se non l’hai ancora fatto, e chiama i seguenti comandi:

Linux / macOS

Shell
$ python manage.py runserver

Windows

Windows
...\> py manage.py runserver

Vedrai il seguente output nella linea di comando:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

09 ago 2026 - 15:50:53
Django version 3.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Hai fatto partire il server di sviluppo di Django, un web server leggero scritto interamanete in Python. L’abbiamo incluso in Python così puoi sviluppare cose rapidamente, senza avere a che fare col configurare un server di produzione – quale Apache – finché non sei pronto ad andare in produzione.

Adesso è un buon momento per notare: non usare questo server per nulla che somegli ad un ambiente di produzione. È inteso solo per uso durante lo sviluppo. (Il nostro lavoro è fare framework, non server per il Web.)

Ora che il server è attivo apri il tuo browser e vai su http://127.0.0.1:8000/. Troverai una pagina con scritto «Congratulations!» e un razzo che sta decollando. Ha funzionato!

Creazione dell’applicazione SondaggiLink to this heading

Ora che il tuo ambiente – un «progetto» – è impostato, sei pronto per iniziare a lavorare.

Ogni applicazione che scrivi in Django è compposta da un pacchetto Python che segue alcune convenzioni. Django fornisce una utility che genera in automatico la struttura di base delle cartelle di una app, così puoi concentrarti sulla scrittura del codice invece che creare le cartelle.

Le tue app possono vivere ovunque sul tuo Python path. In questo tutorial, creeremo la nostra app di sondaggio nella stessa directory del file: manage.py in modo che possa essere importato come modulo di primo livello, piuttosto che come sottomodulo di mysite.

Per creare la tua app, sii sicuro di essere nella stessa cartella di manage.py e scrivi il seguente commando:

Linux / macOS

Shell
$ python manage.py startapp polls

Windows

Windows
...\> py manage.py startapp polls

Creiamo la nostra cartella polls,che viene disposta in questo modo

Code
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

La struttura di questa cartella contiene la nostra applicazione sondaggio.

Scrivi la tua prima vistaLink to this heading

Scriviamo la nostra prima vista. Apri il file polls/views.py e scrivi il seguente codice Python:

polls/views.py
Python
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Questa è il metodo più semplice di scrivere una vista in Django. Per fare una chiamata alla vista, dobbiamo mapparla in una URL - e per questo abbiamo bisogno di URLconf.

Per creare una URLconf nella cartella polls, crea un file col nome urls.py. La cartella della tua app ora dovrebbe essere come:

Code
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

Nel file polls/urls.py includi il seguente codice:

polls/urls.py
Python
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

Il passo successivo è puntare l’URLconf principale al modulo polls.urls. In mysite/urls.py, aggiungi un’importazione per django.urls.include e inserisci un include() nell’elenco urlpatterns, in modo da avere:

mysite/urls.py
Python
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

La funzione include() permette di fare riferimento ad altre URLconf. Ogni volta che Django incontra include(), rimuove qualsiasi parte dell’URL combaciata fino a quel punto e invia la stringa rimanente alla URLconf inclusa per un’ulteriore elaborazione.

L’idea alla base di include() è di semplificare il plug-and-play deglle URL. Poiché i sondaggi si trovano nella propria URLconf (polls/urls.py), possono essere posizionati dentro «/polls/», o dentro «/fun_polls/», o dentro «/content/polls/», o qualsiasi altro percorso e l’app continuerà a funzionare.

Ora hai collegato una vista index nella URLconf. Verifica che funzioni con il seguente comando:

Linux / macOS

Shell
$ python manage.py runserver

Windows

Windows
...\> py manage.py runserver

Nel tuo browser vai all’indirizzo http://localhost:8000/polls/ , e dovresti vedere il testo «Hello, world. You’re at the polls index.», che hai definito nella view index.

Alla funzione path() vengono passati quattro argomenti, due obbligatori: route e view e due opzionali: kwargs`, and name. A questo punto, vale la pena rivedere a cosa servono questi argomenti.

Argomento di path(): routeLink to this heading

route è una stringa che contiene un schema di URL. Durante l’elaborazione di una richiesta, Django inizia dal primo schema in urlpatterns e si fa strada lungo l’elenco, confrontando la URL richiesta con ogni schema fino a quando non trova quello corrispondente.

I pattern non cercano i parametri GET e POST o il nome di dominio. Ad esempio, in una richiesta a https://www.example.com/myapp/, URLconf cercherà myapp/. In una richiesta a https://www.example.com/myapp/?page=3`, URLconf cercherà anche myapp/.

Argomento di path(): viewLink to this heading

Quando Django trova uno schema di corrispondente, chiama la funzione di visualizzazione specificata con un oggetto di tipo HttpRequest come primo argomento e qualsiasi valore «catturato» dal percorso come argomenti chiave. Ne faremo un esempio tra poco.

Argomento di path(): kwargsLink to this heading

Argomenti arbitrari di parole chiave possono essere passati in un dizionario alla vista di destinazione. Non useremo questa funzionalità di Django nel tutorial.

Argomento di path(): nameLink to this heading

Assegnare un nome alla tua URL ti consente di fare riferimento ad esso in modo inequivocabile da qualsiasi altra parte in Django, specialmente all’interno dei template. Questa potente funzionalità ti consente di apportare modifiche globali al modello delle URL del tuo progetto toccando solo un singolo file.

Quando sei a tuo agio con il flusso base di richiesta e risposta, leggi parte 2 di questo tutorial per iniziare a lavorare con il database.