Scrivere la tua prima applicazione in Django, parte 1¶
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 $):
$ python -m django --version
...\> 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 è stato scritto per Django 5.0, che supporta Python 3.10 e successivi. Se la versione di Django è diversa, puoi fare riferimento al tutorial per la tua versione di Django usando il selettore della versione in basso a destra in questa pagina oppure aggiornare Django alla versione più recente. Se stai utilizzando una versione precedente 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.
Dove trovare aiuto:
Se hai difficoltà a completare questo tutorial, per favore vai alla sezione Getting Help delle FAQ.
Creare un progetto¶
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:
$ django-admin startproject mysite
...\> django-admin startproject mysite
Questo creerà una directory mysite
nella directrory presente. Se non funziona, consulta Problemi nell’esecuzione di django-admin.
Nota
Vorrai evitare di chiamare progetti con lo stesso nome di componenti predefiniti in Python o Django. In particolare, questo significa evitare nomi quali django
(che confligge con Django stesso) o test
(che confligge con il pacchetto Python di serie).
Diamo un’occhiata a cosa startproject
ha creato:
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 dimanage.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
: Le dichiarazione di URL per questo progetto Django; una «tavola di contenuti» del tuo sito Django. Per saperne di più sulle URLs, leggi URL dispatcher.mysite/asgi.py
: Un punto di ingresso per i server web compatibili con ASGI per servire il tuo progetto. Vedi Come distribuire con ASGI. per maggiori dettagli .mysite/wsgi.py
: Un punto d’ingresso per web server compatibili con WSGI per servire il tuo progetto. Vedi Come distribuire con WSGI. per maggiori dettagli.
Il server di sviluppo¶
Verifichiamo che il tuo progetto in Django funzioni. Entra nella cartella esterna mysite
, se non l’hai ancora fatto, e chiama i seguenti comandi:
$ python manage.py runserver
...\> 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. agosto 06, 2024 - 15:50:53 Django version 5.0, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Nota
Per ora ignora gli avvisi relativi alle migrazione del database non applicate, ci preoccuperemo a breve del database.
Adesso che il server sta girando, visita http://127.0.0.1:8000/ con il tuo browser web. Vedrai una pagina «Congratulations!», con un razzo che sta partendo. Funziona!
Hai avviato il server di sviluppo Django, un web server leggero scritto puramente in Python. Lo abbiamo incluso con Django in modo che tu possa sviluppare le cose rapidamente, senza dover avere a che fare con la configurazione di un server di produzione – come Apache – finchè non sei pronto per la produzione.
Adesso è un buon momento per fare un appunto: non* usare questo server in nessun ambiente che somigli anche vagamente alla produzione. E” adatto solo allo sviluppo. (Siamo nel business dei web framework, non dei web server).
(To serve the site on a different port, see the runserver
reference.)
Ricaricamento automatico di runserver
Quando necessario, il server di sviluppo ricarica automaticamente il codice Python per ogni richiesta. Non c’è bisogno di far ripartire il server per applicare le modifiche al codice. Ciò nonostante, alcune azioni quali l’aggiunta di file non causano un riavvio. In questi casi dovrai quindi riavviare il server.
Creazione dell’applicazione Sondaggi¶
Ora che il tuo ambiente – un «progetto» – è impostato, sei pronto per iniziare a lavorare.
Ogni applicazione che scrivi in Django è composta 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.
Progetti contro applicazioni
Qual è la differenza tra un progetto ed una app? Una app è una applicazione web che fa qualcosa – per es. un sistema di blog, un database di record pubblici o una piccola app per i sondaggi. Un progetto è una collezione di configurazioni ed app per un particolare sito web. Un progetto può contenere più app. Una app può far parte di più progetti.
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:
$ python manage.py startapp polls
...\> py manage.py startapp polls
Questo creerà la cartella polls
, che è strutturata in questo modo:
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 vista¶
Scriviamo la nostra prima vista. Apri il file polls/views.py
e scrivi il seguente codice Python:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
This is the most basic view possible in Django. To access it in a browser, we
need to map it to a URL - and for this we need to define a URL configuration,
or «URLconf» for short. These URL configurations are defined inside each
Django app, and they are Python files named urls.py
.
To define a URLconf for the polls
app, create a file polls/urls.py
with the following content:
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
Your app directory should now look like:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
The next step is to configure the global URLconf in the mysite
project to
include the URLconf defined in polls.urls
. To do this, add an import for
django.urls.include
in mysite/urls.py
and insert an
include()
in the urlpatterns
list, so you have:
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 delle 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.
Quando usare include()
Dovresti usare sempre include()
quando includi altri pattern URL. L’unica eccezione a questo è admin.site.urls
.
Ora hai collegato una vista index
nella URLconf. Verifica che funzioni con il seguente comando:
$ python manage.py runserver
...\> 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
.
Non hai trovato la pagina?
Se ottieni una pagina di errore, controlla di stare andando su http://localhost:8000/polls/ e non http://localhost:8000/.
Alla funzione path()
vengono passati quattro argomenti, due obbligatori: route
e view
e due opzionali: kwargs
, e``name``. A questo punto, vale la pena rivedere a cosa servono questi argomenti.
Argomento di path()
: route
¶
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()
: view
¶
Quando Django trova un pattern corrispondente, chiama la vista 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()
: kwargs
¶
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()
: name
¶
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.