{"title":"Django a prima vista","version":"5.0","locale":"it","docname":"intro/overview","url":"/it/5.0/intro/overview/","canonical":"https://djangodocs.dev/it/5.0/intro/overview/","summary":"Dal momento che Django è stato sviluppato in un ambiente di redazione veloce, è stato progettato per rendere i task più comuni dello sviluppo web veloci e semplici.…","html":"<h1>Django a prima vista<a class=\"heading-anchor\" href=\"#django-at-a-glance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Dal momento che Django è stato sviluppato in un ambiente di redazione veloce, è stato progettato per rendere i task più comuni dello sviluppo web veloci e semplici. Ecco un sommario informale di come scrivere una applicazione web database-driven usando Django.</p>\n<p>Il fine di questo documento è fornirti abbastanza specifiche tecniche da comprendere come funziona Django ma non vuole essere un tutorial o un manuale – ma abbiamo entrambi! Quando sei pronto ad iniziare un progetto, puoi  <a class=\"reference internal\" href=\"/it/5.0/intro/tutorial01/\"><span class=\"doc\">iniziare con il tutorial</span></a> o <a class=\"reference internal\" href=\"/it/5.0/topics/\"><span class=\"doc\">esplorare la documentazione più dettagliata</span></a>.</p>\n<section id=\"design-your-model\">\n<h2>Progetta il tuo modello<a class=\"heading-anchor\" href=\"#design-your-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Seppure puoi usare Django senza un database, esso viene fornito di un “object-relational mapper’_ nel quale descrivi lo schema del tuo database in codice Python.</p>\n<p>La <a class=\"reference internal\" href=\"/it/5.0/topics/db/models/\"><span class=\"doc\">sintassi data-model</span></a> offre molti ricchi modi di rappresentare i tuoi modelli – finora, ha risolto molti anni di problemi legati agli schemi dei database. Ecco un rapido esempio:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/models.py</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Reporter</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">full_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">70</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Reporter</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">headline</span>\n</code></pre></figure>\n</section>\n<section id=\"install-it\">\n<h2>Installalo<a class=\"heading-anchor\" href=\"#install-it\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Passo successivo, utilizza Django da linea di comando per creare le tabelle nel database automaticamente:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations\n<span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate\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 manage.py makemigrations\n<span class=\"gp\">...\\&gt;</span> py manage.py migrate\n</code></pre></div></div></div>\n<p>Il comando <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> scorre tutti i modelli disponibili e crea migrazioni per tutte le tabelle che ancora non esistono. <a class=\"reference internal\" href=\"/it/5.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> lancia tutte le migrazioni e crea le tabelle nel tuo database, fornendo allo stesso tempo come opzione un <a class=\"reference internal\" href=\"/it/5.0/topics/migrations/\"><span class=\"doc\">controllo dello schema molto più ricco</span></a>.</p>\n</section>\n<section id=\"enjoy-the-free-api\">\n<h2>Prova le API disponibili<a class=\"heading-anchor\" href=\"#enjoy-the-free-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>With that, you’ve got a free, and rich, <a class=\"reference internal\" href=\"/it/5.0/topics/db/queries/\"><span class=\"doc\">Python API</span></a>\nto access your data. The API is created on the fly, no code generation\nnecessary:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"go\"># Import the models we created from our &quot;news&quot; app</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">news.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span><span class=\"p\">,</span> <span class=\"n\">Reporter</span>\n\n<span class=\"go\"># No reporters are in the system yet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n\n<span class=\"go\"># Create a new Reporter.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">Reporter</span><span class=\"p\">(</span><span class=\"n\">full_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John Smith&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Save the object into the database. You have to call save() explicitly.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Now it has an ID.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">id</span>\n<span class=\"go\">1</span>\n\n<span class=\"go\"># Now the new reporter is in the database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Reporter: John Smith&gt;]&gt;</span>\n\n<span class=\"go\"># Fields are represented as attributes on the Python object.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n<span class=\"go\">&#39;John Smith&#39;</span>\n\n<span class=\"go\"># Django provides a rich database lookup API.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">full_name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">full_name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;mith&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Reporter: John Smith&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Reporter</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"w\">    </span><span class=\"o\">...</span>\n<span class=\"gr\">DoesNotExist</span>: <span class=\"n\">Reporter matching query does not exist.</span>\n\n<span class=\"x\"># Create an article.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">(),</span> <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django is cool&quot;</span><span class=\"p\">,</span> <span class=\"n\">content</span><span class=\"o\">=</span><span class=\"s2\">&quot;Yeah.&quot;</span><span class=\"p\">,</span> <span class=\"n\">reporter</span><span class=\"o\">=</span><span class=\"n\">r</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Now the article is in the database.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># Article objects get API access to related Reporter objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">reporter</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span>\n<span class=\"go\">&#39;John Smith&#39;</span>\n\n<span class=\"go\"># And vice versa: Reporter objects get API access to Article objects.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">article_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># The API follows relationships as far as you need, performing efficient</span>\n<span class=\"go\"># JOINs for you behind the scenes.</span>\n<span class=\"go\"># This finds all articles by a reporter whose name starts with &quot;John&quot;.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">reporter__full_name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: Django is cool&gt;]&gt;</span>\n\n<span class=\"go\"># Change an object by altering its attributes and calling save().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">full_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Billy Goat&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n<span class=\"go\"># Delete an object with delete().</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\">\n<h2>Un’interfaccia di amministrazione dinamica: non è solo impalcatura – è tutta la casa<a class=\"heading-anchor\" href=\"#a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Una volta che i modelli sono definiti, Django può creare una automaticamente una <a class=\"reference internal\" href=\"/it/5.0/ref/contrib/admin/\"><span class=\"doc\">interfaccia amministrativa</span></a> professionale e production-ready – un sito web che permette agli utenti autenticati di aggiungere, cambiare e cancellare oggetti. L’unico step richiesto è quello di registrare il tuo modello nel sito di amministrazione:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/models.py</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">content</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Reporter</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/admin.py</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Article</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>La filosofia qui è che il tuo sito viene modificato da uno staff, un cliente o magari proprio da te – e tu non vuoi dover avere a che fare con la creazione dell’interfaccia di backend solo per gestire il contenuto.</p>\n<p>Un classico modus operandi nella creazione delle app Django è creare i modelli e avere il pannello di amministratore online il prima possibile, in modo che lo staff o i clienti possano iniziare a inserire i dati. Dopo di che è possibile iniziare a sviluppare come presentare quei dati agli utenti.</p>\n</section>\n<section id=\"design-your-urls\">\n<h2>Progetta le tue URL<a class=\"heading-anchor\" href=\"#design-your-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Uno schema di URL pulito ed elegante è un dettaglio importante in una applicazione web di qualità elevata. Django incoraggia un design delle URL gradevole e non aggiunge parti non necessarie come <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code> o <code class=\"docutils literal notranslate\"><span class=\"pre\">.asp</span></code>.</p>\n<p>Per pianificare le URL di un app, crea un modulo Python chiamato a <a class=\"reference internal\" href=\"/it/5.0/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>.  Una tabella di contenuti della tua app, contiene una corrispondenza tra il pattern URL e le funzioni di callback Python. URLconfs è utile anche per disaccoppiare le URL dal codice Python.</p>\n<p>Ecco come dovrebbe essere un URLconf per l’esempio precedente <code class=\"docutils literal notranslate\"><span class=\"pre\">Reporter</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">Article</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/urls.py</span></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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">year_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">month_archive</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;articles/&lt;int:year&gt;/&lt;int:month&gt;/&lt;int:pk&gt;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">article_detail</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Il codice qui sopra mappa i percorsi URL a funzioni Python («views»). Le stringhe dei percorsi usano dei segnaposto per «catturare» valori dagli URL. Quando un utente visita una pagina, Django scorre tutti i percorsi, nell’ordine in cui sono definiti, e si ferma al primo che corrisponde al percorso richiesto. (Se nessuno di essi corrisponde, Django chiama una view «speciale» con un errore 404.) Questo procedimento è molto veloce, perché i percorsi sono compilati in espressioni regolari al momento del caricamento.</p>\n<p>Una volta che c’è corrispondenza con il pattern della URL, Django chiama la view corrispondente, il quale è una funzione Python. A ogni view viene passato un oggetto request - che contiene i metadati della richiesta - e i valori catturati nel pattern URL.</p>\n<p>Per esempio, se un utente richiedesse la URL «/articles/2005/05/39323/», Django chiamerebbe la funzione <code class=\"docutils literal notranslate\"><span class=\"pre\">news.views.article_detail(request,</span> <span class=\"pre\">year=2005,</span> <span class=\"pre\">month=5,</span> <span class=\"pre\">pk=39323)</span></code>.</p>\n</section>\n<section id=\"write-your-views\">\n<h2>Scrivi le tue viste<a class=\"heading-anchor\" href=\"#write-your-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ogni view è responsabile nel fare una di queste due cose: Ritornare un’istanza della classe <a class=\"reference internal\" href=\"/it/5.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> che contiene il contenuto della pagina richiesta, o lancia un’eccezione come <a class=\"reference internal\" href=\"/it/5.0/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Http404</span></code></a>. Il resto dipende da te.</p>\n<p>Genericamente, una view riceve dati in base ai parametri passati, carica e renderizza il template con i dati ricevuti.\nEcco una view di esempio per  <code class=\"docutils literal notranslate\"><span class=\"pre\">year_archive</span></code> sopra citata:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/views.py</span></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=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">year_archive</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">year</span><span class=\"p\">):</span>\n    <span class=\"n\">a_list</span> <span class=\"o\">=</span> <span class=\"n\">Article</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"n\">year</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;year&quot;</span><span class=\"p\">:</span> <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"s2\">&quot;article_list&quot;</span><span class=\"p\">:</span> <span class=\"n\">a_list</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;news/year_archive.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Questo esempio usa Django’s <a class=\"reference internal\" href=\"/it/5.0/topics/templates/\"><span class=\"doc\">template system</span></a>,  il quale ha una serie di potenti caratteristiche, ma prova a rimanere abbastanza semplice per un uso per i non-programmatori.</p>\n</section>\n<section id=\"design-your-templates\">\n<h2>Progetta i tuoi template<a class=\"heading-anchor\" href=\"#design-your-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il codice precedente carica il template <code class=\"docutils literal notranslate\"><span class=\"pre\">news/year_archive.html</span></code>.</p>\n<p>Django ha un percorso di ricerca dei template, il quale ti permette di ridurre la ridondanza nei vari template. Nella tua configurazione di Django, specifica una lista di cartelle da controllare tramite la configurazione :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>DIRS  per la ricerca dei template. Se un template non esiste nella prima cartella, controlla la seconda e così via.</p>\n<p>Diciamo che <code class=\"docutils literal notranslate\"><span class=\"pre\">news/year_archive.html</span></code> sia stato trovato. Ecco come potrebbe essere:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/news/templates/news/year_archive.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>Articles for <span class=\"cp\">{{</span> <span class=\"nv\">year</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">article</span> <span class=\"k\">in</span> <span class=\"nv\">article_list</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">article.headline</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>By <span class=\"cp\">{{</span> <span class=\"nv\">article.reporter.full_name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Published <span class=\"cp\">{{</span> <span class=\"nv\">article.pub_date</span><span class=\"o\">|</span><span class=\"nf\">date</span><span class=\"s2\">:&quot;F j, Y&quot;</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n<p>Le variabili sono delimitate da doppie parentesi graffe. <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">article.headline</span> <span class=\"pre\">}}</span></code> significa «Mostra il valore dell’attributo headline dell’articolo.» Ma i punti non sono usati sono per accedere a un attributo. Possono essere usati anche per accedere a una chiave di un dizionario, un indice o una chiamata a una funzione.</p>\n<p>Nota che <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">article.pub_date|date:&quot;F</span> <span class=\"pre\">j,</span> <span class=\"pre\">Y&quot;</span> <span class=\"pre\">}}</span></code> usa una «pipe» (il carattere «|») in stile Unix . Questo è un filtro del template ed è un modo per filtrare il valore di una variabile. In questo caso, il filtro data formatta un oggetto Python di tipo datetime nel formato dato (come si trova nella funzione data di PHP).</p>\n<p>Puoi concatenare tutti i filtri che desideri.  Puoi scrivere <a class=\"reference internal\" href=\"/it/5.0/howto/custom-template-tags/#howto-writing-custom-template-filters\"><span class=\"std std-ref\">filtri di template personalizzati</span></a>. Puoi scrivere <a class=\"reference internal\" href=\"/it/5.0/howto/custom-template-tags/\"><span class=\"doc\">tag di template personalizzati</span></a>, che eseguono codice Python personalizzato dietro le quinte.</p>\n<p>Infine, Django usa il concetto di «template inheritance». Questo è ciò che fa <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">&quot;base.html&quot;</span> <span class=\"pre\">%}</span></code>. Significa «Prima carica il template chiamato “base”, nel quale sono definiti un mucchio di blocchi, e riempi i blocchi con quelli seguenti.» In breve, questo permette di ridurre drasticamente la ridondanza nei template: ogni template deve definire solo ciò che è unico per quel template.</p>\n<p>Ecco come dovrebbe essere il template «base.html», compreso l’uso di: <span class=\"xref std std-doc\">static files</span>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/templates/base.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">title</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s1\">&#39;images/sitelogo.png&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;Logo&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></figure>\n<p>Semplicemente, definisce la grafica generale del sito (con il logo), e fornisce dei «buchi» da riempire da parte dei template figli. Questo significa che il sito può essere ridisegnato modificando un unico file –  il template di base.</p>\n<p>Ti permette anche di creare versione multiple del sito, con template di base differenti mentre riutilizzi i template figlio. I creatori di Django hanno utilizzato questa tecnica per creare versioni per dispositivi mobile soprendentemente diversi giusto creando un nuovo base template.</p>\n<p>Non sei costretto ad utilizzare il linguaggio di template di Django se ne preferisci un altro.\nAnche se il linguaggio di template di Django è particolarmente ben integrato con i modelli di Django, nessuno ti obbliga ad utilizzarlo. A questo proposito, non sei obbligato ad utilizzare nemmeno il Django database API. Puoi utilizzare qualsiasi livello di astrazione per i database, puoi leggere file XML, puoi leggere file sul disco, o qualsiasi cosa tu voglia.\nQualsiasi pezzo di Django (models, views, templates) lavorano indipendentemente dagli altri pezzi.</p>\n</section>\n<section id=\"this-is-just-the-surface\">\n<h2>Questa è solo la superficie<a class=\"heading-anchor\" href=\"#this-is-just-the-surface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Questa è stata solo una breve panoramica sulle funzionalità di Django. Maggiori funzionalità :</p>\n<ul class=\"simple\">\n<li><p>Un <a class=\"reference internal\" href=\"/it/5.0/topics/cache/\"><span class=\"doc\">framework per la cache</span></a> che si integra con memcached o altri backend.</p></li>\n<li><p>Un <a class=\"reference internal\" href=\"/it/5.0/ref/contrib/syndication/\"><span class=\"doc\">framework per la syndication</span></a> che ti permette di creare feed RSS e Atom scrivendo una piccola classe Python.</p></li>\n<li><p>Più attraenti funzionalità di amministrazione generate automaticamente – questa panoramica ha appena scalfito la superficie.</p></li>\n</ul>\n<p>I prossimi passi per te sono <a class=\"reference external\" href=\"https://www.djangoproject.com/download/\">scaricare Django</a>, leggere <a class=\"reference internal\" href=\"/it/5.0/intro/tutorial01/\"><span class=\"doc\">the tutorial</span></a> e unirti alla` comunità`_. Grazie per il tuo interesse!</p>\n</section>","rootId":"django-at-a-glance","toc":[{"title":"Progetta il tuo modello","anchor":"design-your-model","children":[]},{"title":"Installalo","anchor":"install-it","children":[]},{"title":"Prova le API disponibili","anchor":"enjoy-the-free-api","children":[]},{"title":"Un’interfaccia di amministrazione dinamica: non è solo impalcatura – è tutta la casa","anchor":"a-dynamic-admin-interface-it-s-not-just-scaffolding-it-s-the-whole-house","children":[]},{"title":"Progetta le tue URL","anchor":"design-your-urls","children":[]},{"title":"Scrivi le tue viste","anchor":"write-your-views","children":[]},{"title":"Progetta i tuoi template","anchor":"design-your-templates","children":[]},{"title":"Questa è solo la superficie","anchor":"this-is-just-the-surface","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/5.0/intro/"}],"prev":{"docname":"intro/index","title":"Come iniziare","url":"/it/5.0/intro/"},"next":{"docname":"intro/install","title":"Guida rapida di installazione","url":"/it/5.0/intro/install/"},"formats":{"html":"/it/5.0/intro/overview/","markdown":"/it/5.0/intro/overview.md","json":"/it/5.0/intro/overview.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/intro/overview.txt","official":"https://docs.djangoproject.com/it/5.0/intro/overview/","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"]}