{"title":"Scrivere la tua prima applicazione in Django, parte 1","version":"3.2","locale":"it","docname":"intro/tutorial01","url":"/it/3.2/intro/tutorial01/","canonical":"https://djangodocs.dev/it/3.2/intro/tutorial01/","summary":"Impariamo attraverso un esempio. Durante questa guida, ti accompagneremo attraverso la creazione di una semplice applicazione per sondaggi.","html":"<h1>Scrivere la tua prima applicazione in Django, parte 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Impariamo attraverso un esempio.</p>\n<p>Durante questa guida, ti accompagneremo attraverso la creazione di una semplice applicazione per sondaggi.</p>\n<p>Consisterà di due parti:</p>\n<ul class=\"simple\">\n<li><p>Un sito pubblico, che permette agli utenti di visualizzare sondaggi e votarli.</p></li>\n<li><p>Un sito amministrativo che ti permette l’aggiunta, modifica ed eliminazione di sondaggi.</p></li>\n</ul>\n<p>Supponiamo che tu abbia già <a class=\"reference internal\" href=\"/it/3.2/intro/install/\"><span class=\"doc\">Django installato</span></a>. Puoi dire che Django sia installato e quale versione sia eseguendo il seguente comando in un prompt della shell (indicato dal prefisso $):</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python -m django --version\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m django --version\n</code></pre></div></div></div>\n<p>Se Django è installato, dovresti vedere la versione della tua installazione. Se non lo è, riceverai un errore che dice «No module named django».</p>\n<p>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 <a class=\"reference internal\" href=\"/it/3.2/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">Che versione di Python posso usare con Django?</span></a> per trovare una versione compatibile di Django.</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/3.2/topics/install/\"><span class=\"doc\">Come installare Django</span></a> per consigli su come rimuovere vecchie versioni di Django ed installarne una più nuova.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Dove trovare aiuto:</p>\n<p>Se hai difficoltà a completare questo tutorial,  per favore vai alla sezione <a class=\"reference internal\" href=\"/it/3.2/faq/help/\"><span class=\"doc\">Getting Help</span></a> delle FAQ.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Creare un progetto<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>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 <a class=\"reference internal\" href=\"/it/3.2/glossary/#term-project\"><span class=\"xref std std-term\">progetto</span></a> 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.</p>\n<p>Dalla linea di comando, <code class=\"docutils literal notranslate\">cd</code> dentro la directory dove vorresti tenere il tuo codice, poi chiama il seguente comando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin startproject mysite\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin startproject mysite\n</code></pre></div></div></div>\n<p>Questo creerà una directory <code class=\"docutils literal notranslate\">mysite</code> nella directrory presente. Se non funziona, consulta <a class=\"reference internal\" href=\"/it/3.2/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Problemi nell’esecuzione di django-admin</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Vorrai evitare di chiamare progetti con lo stesso nome di componenti predefiniti in Python o Django. In particolare, questo significa evitare nomi quali <code class=\"docutils literal notranslate\">django</code> (che confligge con Django stesso) o <code class=\"docutils literal notranslate\">test</code> (che confligge con il pacchetto Python di serie).</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\" role=\"note\">\n<p class=\"admonition-title\">Dove dovrebbe vivere questo codice?</p>\n<p>Se provieni da semplice vecchio PHP (senza uso di framework moderni), probabilmente sei abituato a mettere il codice diremmente sotto la document root del server Web (in un posto quale <code class=\"docutils literal notranslate\">/var/www</code>). Con Django, non fai così. Non è una buona idea mettere alcuno di questo codice Python all’interno della document root del tuo server Web, perché rischi la possibilità che il pubblico possa vedere il tuo codice attraverso il Web. Non è una buona idea per la sicurezza.</p>\n<p>Metti il tuo codice in qualche directory <strong>fuori</strong> dalla document root, quale <code class=\"file docutils literal notranslate\">/home/mycode</code>.</p>\n</aside>\n<p>Diamo un’ochiata a cosa <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a> ha creato:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>mysite<span class=\"o\">/</span>\n    manage<span class=\"o\">.</span>py\n    mysite<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n        settings<span class=\"o\">.</span>py\n        urls<span class=\"o\">.</span>py\n        asgi<span class=\"o\">.</span>py\n        wsgi<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Questi file sono:</p>\n<ul class=\"simple\">\n<li><p>La directory principale <code class=\"file docutils literal notranslate\">mysite/</code> è un contenitore per il tuo progetto. Il suo nome non ha importanza per Django; puoi rinominarlo come preferisci.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">manage.py</code>: 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 <code class=\"file docutils literal notranslate\">manage.py</code> in in <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a>.</p></li>\n<li><p>La cartella interna <code class=\"file docutils literal notranslate\">mysite/</code> è 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. <code class=\"docutils literal notranslate\">mysite.urls</code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/__init__.py</code>: Un file vuoto che indica a Python che questa directory dovrebbe essere considerata un pacchetto Python. Se sei un principiante di Python, leggi <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">ulteriori informazioni sui pacchetti</span></a> nella documentazione ufficiale di Python.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/settings.py</code>: Settaggi/configurazione per questo progetto Django. <a class=\"reference internal\" href=\"/it/3.2/topics/settings/\"><span class=\"doc\">Django settings</span></a> ha tutte le informazioni di cui hai bisogno su come funzionano i settaggi.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/urls.py</code>: The URL declarations for this Django project; a\n«table of contents» of your Django-powered site. You can read more about\nURLs in <a class=\"reference internal\" href=\"/it/3.2/topics/http/urls/\"><span class=\"doc\">URL dispatcher</span></a>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/asgi.py</code>: Un punto di ingresso per i server web compatibili con ASGI per servire il tuo progetto. Vedi <a class=\"reference internal\" href=\"/it/3.2/howto/deployment/asgi/\"><span class=\"doc\">How to deploy with ASGI</span></a> per maggiori dettagli .</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/wsgi.py</code>: Un punto d’ingresso per web server compatibili con WSGI per servire il tuo progetto. Vedi <a class=\"reference internal\" href=\"/it/3.2/howto/deployment/wsgi/\"><span class=\"doc\">How to deploy with WSGI</span></a> per maggiori dettagli.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>Il server di sviluppo<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Verifichiamo che il tuo progetto in Django funzioni. Entra nella cartella esterna <code class=\"file docutils literal notranslate\">mysite</code>, se non l’hai ancora fatto, e chiama i seguenti comandi:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>Vedrai il seguente output nella linea di comando:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 ago 2026 - 15:50:53\nDjango version 3.2, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Per ora ignora gli avvisi relativi alle migrazione del database non applicate, ci preoccuperemo a breve del database.</p>\n</aside>\n<p>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.</p>\n<p>Adesso è un buon momento per notare: <strong>non</strong> 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.)</p>\n<p>Ora che il server è attivo apri il tuo browser e vai su <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>. Troverai una pagina con scritto «Congratulations!» e un razzo che sta decollando. Ha funzionato!</p>\n<aside class=\"admonition-changing-the-port admonition\" role=\"note\">\n<p class=\"admonition-title\">Cambiare la porta</p>\n<p>Di default, il comando <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> avvia il server di sviluppo sull’IP interno alla porta 8000.</p>\n<p>Se vuoi cambiare la porta del server, passala come argomento alla linea di comando. Per esempio, questo comando avvia il server sulla porta 8080:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver <span class=\"m\">8080</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver 8080\n</code></pre></div></div></div>\n<p>Se vuoi cambiare l’IP del server, passalo insieme alla porta. Ad esempio, per stare in ascolto su tutti gli IP pubblici disponibili (che è utile se stai eseguendo Vagrant o per mostrare il tuo lavoro su altri computer in rete), usa:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver <span class=\"m\">0</span>:8000\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver 0:8000\n</code></pre></div></div></div>\n<p><strong>0</strong> è una scorciatoia per <strong>0.0.0.0</strong>. La documentazione completa per il server di sviluppo può essere trovata in <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a>.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\" role=\"note\">\n<p class=\"admonition-title\">Ricaricamento automatico di <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a></p>\n<p>Quando necessario, il ssrver 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.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Creazione dell’applicazione Sondaggi<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ora che il tuo ambiente – un «progetto»  – è impostato, sei pronto per iniziare a lavorare.</p>\n<p>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.</p>\n<aside class=\"admonition-projects-vs-apps admonition\" role=\"note\">\n<p class=\"admonition-title\">Progetti contro applicazioni</p>\n<p>Qual è la differenza tra un progetto e un’app? Un’app è un’applicazione Web che fa qualcosa – es: un sistema di Weblog, un database di record pubblici o una piccola app per sondaggi. Un progetto è una raccolta di configurazioni e app per un determinato sito Web. Un progetto può contenere più app. Un’app può essere in più progetti.</p>\n</aside>\n<p>Le tue app possono vivere ovunque sul tuo <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a>. In questo tutorial, creeremo la nostra app di sondaggio nella stessa directory del file: <code class=\"file docutils literal notranslate\">manage.py</code> in modo che possa essere importato come modulo di primo livello, piuttosto che come sottomodulo di <code class=\"docutils literal notranslate\">mysite</code>.</p>\n<p>Per creare la tua app, sii sicuro di essere nella stessa cartella di <code class=\"file docutils literal notranslate\">manage.py</code> e scrivi il seguente commando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py startapp polls\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py startapp polls\n</code></pre></div></div></div>\n<p>Creiamo la nostra cartella <code class=\"file docutils literal notranslate\">polls</code>,che viene disposta in questo modo</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>La struttura di questa cartella contiene la nostra applicazione sondaggio.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Scrivi la tua prima vista<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Scriviamo la nostra prima vista. Apri il file <code class=\"docutils literal notranslate\">polls/views.py</code> e scrivi il seguente codice Python:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/views.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>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.</p>\n<p>Per creare una URLconf nella cartella polls, crea un file col nome <code class=\"docutils literal notranslate\">urls.py</code>. La cartella della tua app ora dovrebbe essere come:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    urls<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Nel file <code class=\"docutils literal notranslate\">polls/urls.py</code> includi il seguente codice:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">polls/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Il passo successivo è puntare l’URLconf principale al modulo <code class=\"docutils literal notranslate\">polls.urls</code>. In <code class=\"docutils literal notranslate\">mysite/urls.py</code>, aggiungi un’importazione per <code class=\"docutils literal notranslate\">django.urls.include</code> e inserisci un <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> nell’elenco <code class=\"docutils literal notranslate\">urlpatterns</code>, in modo da avere:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">mysite/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;polls/&#39;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;admin/&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>La funzione <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> permette di fare riferimento ad altre URLconf. Ogni volta che Django incontra <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>, rimuove qualsiasi parte dell’URL combaciata fino a quel punto e invia la stringa rimanente alla URLconf inclusa per un’ulteriore elaborazione.</p>\n<p>L’idea alla base di <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> è di semplificare il plug-and-play deglle URL. Poiché i sondaggi si trovano nella propria URLconf (<code class=\"docutils literal notranslate\">polls/urls.py</code>), possono essere posizionati dentro «/polls/», o dentro «/fun_polls/», o dentro «/content/polls/», o qualsiasi altro percorso e l’app continuerà a funzionare.</p>\n<aside class=\"admonition-when-to-use-func-django-urls-include admonition\" role=\"note\">\n<p class=\"admonition-title\">Quando usare  <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a></p>\n<p>Dovresti usare sempre <code class=\"docutils literal notranslate\">include()</code> quando includi altri pattern URL. L’unica eccezione a questo è <code class=\"docutils literal notranslate\">admin.site.urls</code>.</p>\n</aside>\n<p>Ora hai collegato una vista <code class=\"docutils literal notranslate\">index</code> nella URLconf. Verifica che funzioni con il seguente comando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>Nel tuo browser vai all’indirizzo <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> , e dovresti vedere il testo «<em>Hello, world. You’re at the polls index.</em>», che hai definito nella view  <code class=\"docutils literal notranslate\">index</code>.</p>\n<aside class=\"admonition-page-not-found admonition\" role=\"note\">\n<p class=\"admonition-title\">Non hai trovato la pagina?</p>\n<p>Se ottieni una pagina di errore, controlla di stare andando su <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> e non <a class=\"reference external\" href=\"http://localhost:8000/\">http://localhost:8000/</a>.</p>\n</aside>\n<p>Alla funzione <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> vengono passati quattro argomenti, due obbligatori: <code class=\"docutils literal notranslate\">route</code> e <code class=\"docutils literal notranslate\">view</code> e due opzionali: kwargs`, and <code class=\"docutils literal notranslate\">name</code>. A questo punto, vale la pena rivedere a cosa servono questi argomenti.</p>\n<section id=\"path-argument-route\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>: <code class=\"docutils literal notranslate\">route</code><a class=\"heading-anchor\" href=\"#path-argument-route\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">route</code> è una stringa che contiene un schema di URL. Durante l’elaborazione di una richiesta, Django inizia dal primo schema in <code class=\"docutils literal notranslate\">urlpatterns</code> e si fa strada lungo l’elenco, confrontando la URL richiesta con ogni schema fino a quando non trova quello corrispondente.</p>\n<p>I pattern non cercano i parametri GET e POST o il nome di dominio. Ad esempio, in una richiesta a <code class=\"docutils literal notranslate\">https://www.example.com/myapp/</code>, URLconf cercherà <code class=\"docutils literal notranslate\">myapp/</code>. In una richiesta a https://www.example.com/myapp/?page=3`, URLconf cercherà anche <code class=\"docutils literal notranslate\">myapp/</code>.</p>\n</section>\n<section id=\"path-argument-view\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>: <code class=\"docutils literal notranslate\">view</code><a class=\"heading-anchor\" href=\"#path-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando Django trova uno schema di corrispondente, chiama la funzione di visualizzazione specificata con un oggetto di tipo <a class=\"reference internal\" href=\"/it/3.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> come primo argomento e qualsiasi valore «catturato» dal percorso come argomenti chiave. Ne faremo un esempio tra poco.</p>\n</section>\n<section id=\"path-argument-kwargs\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>: <code class=\"docutils literal notranslate\">kwargs</code><a class=\"heading-anchor\" href=\"#path-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Argomenti arbitrari di parole chiave possono essere passati in un dizionario alla vista di destinazione. Non useremo questa funzionalità di Django nel tutorial.</p>\n</section>\n<section id=\"path-argument-name\">\n<h3>Argomento di <a class=\"reference internal\" href=\"/it/3.2/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a>: <code class=\"docutils literal notranslate\">name</code><a class=\"heading-anchor\" href=\"#path-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>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.</p>\n<p>Quando sei a tuo agio con il flusso base di richiesta e risposta, leggi <a class=\"reference internal\" href=\"/it/3.2/intro/tutorial02/\"><span class=\"doc\">parte 2 di questo tutorial</span></a>  per iniziare a lavorare con il database.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Creare un progetto","anchor":"creating-a-project","children":[]},{"title":"Il server di sviluppo","anchor":"the-development-server","children":[]},{"title":"Creazione dell’applicazione Sondaggi","anchor":"creating-the-polls-app","children":[]},{"title":"Scrivi la tua prima vista","anchor":"write-your-first-view","children":[{"title":"Argomento di path(): route","anchor":"path-argument-route","children":[]},{"title":"Argomento di path(): view","anchor":"path-argument-view","children":[]},{"title":"Argomento di path(): kwargs","anchor":"path-argument-kwargs","children":[]},{"title":"Argomento di path(): name","anchor":"path-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/3.2/intro/"}],"prev":{"docname":"intro/install","title":"Guida rapida di installazione","url":"/it/3.2/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Scrivere la tua prima applicazione in Django, parte 2","url":"/it/3.2/intro/tutorial02/"},"formats":{"html":"/it/3.2/intro/tutorial01/","markdown":"/it/3.2/intro/tutorial01.md","json":"/it/3.2/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/it/3.2/intro/tutorial01/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}