{"title":"Lista dei controlli per la distribuzione","version":"5.2","locale":"it","docname":"howto/deployment/checklist","url":"/it/5.2/howto/deployment/checklist/","canonical":"https://djangodocs.dev/it/5.2/howto/deployment/checklist/","summary":"Internet è un ambiente ostile. Prima di distribuire il tuo progetto Django, dovresti prenderti del tempo per revisionare le tue configurazioni, tenendo a mente…","html":"<h1>Lista dei controlli per la distribuzione<a class=\"heading-anchor\" href=\"#deployment-checklist\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Internet è un ambiente ostile. Prima di distribuire il tuo progetto Django, dovresti prenderti del tempo per revisionare le tue configurazioni, tenendo a mente sicurezza, performance ed gestione operativa.</p>\n<p>Django include molte <a class=\"reference internal\" href=\"/it/5.2/topics/security/\"><span class=\"doc\">caratteristiche di sicurezza</span></a>. Alcune sono built-in e sempre abilitate. Altre sono opzionali perchè non sono sempre appropriate o perchè non sono pratiche in fase di sviluppo. Per esempio, forzare HTTPS può non andare bene per tutti i siti ed è molto poco pratico per lo sviluppo locale.</p>\n<p>Le ottimizzazioni di performance sono un’altra categoria di tradeoff con la convenienza. Per esempio, il caching è utile in produzione, meno per lo sviluppo locale. Anche l’error reporting deve essere molto differente.</p>\n<p>La seguente lista di controlli include configurazioni come:</p>\n<ul class=\"simple\">\n<li><p>devono essere configurate correttamente in Django affinché forniscano il livello di sicurezza atteso;</p></li>\n<li><p>ci si aspetta che siano differenti per ogni ambiente;</p></li>\n<li><p>abilita le funzionalità di sicurezza opzionali;</p></li>\n<li><p>Abilita le ottimizzazioni per le prestazioni</p></li>\n<li><p>fornisce le segnalazioni dell’errore.</p></li>\n</ul>\n<p>Molte di queste impostazioni sono sensibili e dovrebbero essere trattate come confidenziali. Se stai rilasciando il codice sorgente del tuo progetto, una pratica comune è quella di pubblicare impostazioni adeguate per lo sviluppo ed usare moduli di impostazioni privati per la produzione.</p>\n<section id=\"run-manage-py-check-deploy\">\n<h2>Lancia <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code><a class=\"heading-anchor\" href=\"#run-manage-py-check-deploy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Alcuni dei check descritti qui sotto possono essere automatizzati utilizzando l’opzione <a class=\"reference internal\" href=\"/it/5.2/ref/django-admin/#cmdoption-check-deploy\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code></a>. Assicurati di lanciarla sul file di impostazioni della produzione come descritto nella documentazione delle opzioni.</p>\n</section>\n<section id=\"switch-away-from-manage-py-runserver\">\n<h2>Switch away from <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">runserver</span></code><a class=\"heading-anchor\" href=\"#switch-away-from-manage-py-runserver\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The <a class=\"reference internal\" href=\"/it/5.2/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> command is not designed for a production setting. Be\nsure to switch to a production-ready WSGI or ASGI server. For a few common\noptions, see <a class=\"reference internal\" href=\"/it/5.2/howto/deployment/wsgi/\"><span class=\"doc\">WSGI servers</span></a> or\n<a class=\"reference internal\" href=\"/it/5.2/howto/deployment/asgi/\"><span class=\"doc\">ASGI servers</span></a>.</p>\n</section>\n<section id=\"critical-settings\">\n<h2>Configurazioni critiche<a class=\"heading-anchor\" href=\"#critical-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"secret-key\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a><a class=\"heading-anchor\" href=\"#secret-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>La chiave segreta deve essere un valore casuale grande e deve essere tenuta segreta.</strong></p>\n<p>Assicurati che la chiave utilizzata in produzione non sia usata da altre parte ed evita di farne un commit verso il software di controllo dei sorgenti. Questo riduce il numero di vettori dai quali un attaccante potrebbe acquisire la chiave.</p>\n<p>Invece di fare hardcoding della chiave segreta nelle tuo modulo di impostazioni, cosidera di caricarla da una variabile d’ambiente:</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><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;SECRET_KEY&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>o da un file:</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><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/etc/secret_key.txt&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Se stai utilizzando la rotazione delle chiavi per i segreti, puoi usare <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code></a>:</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><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;CURRENT_SECRET_KEY&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">SECRET_KEY_FALLBACKS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;OLD_SECRET_KEY&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Assicurati che le vecchie chiavi siano rimosse prontamente da <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code>.</p>\n</section>\n<section id=\"debug\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a><a class=\"heading-anchor\" href=\"#debug\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>Non devi mai abilitare la modalità debug in produzione</strong></p>\n<p>Stai certamente sviluppando il tuo progetto con <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a>,  perchè abilita comode feature come i traceback completi nel browser.</p>\n<p>Per un ambiente di produzione, tuttavia, è un’idea davvero cattiva, perchè espone molte informazioni sul progetto: stralci di codice sorgente, variabili locali, impostazioni, librerie utilizzate ecc…</p>\n</section>\n</section>\n<section id=\"environment-specific-settings\">\n<h2>Configurazione dipendente dall’ambiente<a class=\"heading-anchor\" href=\"#environment-specific-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"allowed-hosts\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a><a class=\"heading-anchor\" href=\"#allowed-hosts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando  <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>,  Django non funziona affatto senza un valore adatto di <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a>.</p>\n<p>Questa impostazione è necessaria per proteggere il tuo sito da alcuni attacchi CSRF. Se usi una wildcard, devi fare la tua validazione dell’header HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code> o altrimenti assicurarti di non essere vulnerabile a questa categoria di attacchi.</p>\n<p>Dovresti anche configurare il web server che sta davanti a Django per validare l’host. Dovrebbe rispondere con una pagina di errore statica o ignorare richieste di host sbagliati invece di inoltrare le richieste a Django. In questo modo eviterai errori spuri nei log di Django (o email, se hai l’error reporting configurato in quel modo). Per esempio, su nginx potresti voler impostare un server di default che restituisca «444 No Response» per gli host sconosciuti:</p>\n<div class=\"code-block\" data-language=\"nginx\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Nginx</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=\"Nginx code\"><code><span class=\"k\">server</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kn\">listen</span><span class=\"w\"> </span><span class=\"mi\">80</span><span class=\"w\"> </span><span class=\"s\">default_server</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"kn\">return</span><span class=\"w\"> </span><span class=\"mi\">444</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"caches\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a><a class=\"heading-anchor\" href=\"#caches\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se stai usando una cache, i parametri di connessione potrebbero essere differenti tra sviluppo e produzione. Django ha come default il <a class=\"reference internal\" href=\"/it/5.2/topics/cache/#local-memory-caching\"><span class=\"std std-ref\">local-memory caching</span></a> per processo, che può non essere desiderabile.</p>\n<p>I server di cache spesso hanno una autenticazione debole. Accertati che accettino connessioni solo dai server delle applicazioni.</p>\n</section>\n<section id=\"databases\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a><a class=\"heading-anchor\" href=\"#databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I parametri di connessione al database saranno probabilmente differenti tra sviluppo e produzione.</p>\n<p>Le password dei database sono molto sensibili. Dovresti proteggere esattamente come <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a>.</p>\n<p>Per la massima sicurezza, verifica che il database accetti connessioni solo dai server applicativi.</p>\n<p>Se non hai configurato i backup per il tuo database, fallo immediatamente!</p>\n</section>\n<section id=\"email-backend-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> ed impostazioni correlate<a class=\"heading-anchor\" href=\"#email-backend-and-related-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se il tuo sito invia email, questi valori dovranno essere configurati opportunamente.</p>\n<p>Di default, Django manda email da <a class=\"reference external\" href=\"mailto:webmaster&#37;&#52;&#48;localhost\">webmaster<span>&#64;</span>localhost</a> e <a class=\"reference external\" href=\"mailto:root&#37;&#52;&#48;localhost\">root<span>&#64;</span>localhost</a>. Comunque, alcuni provider rigettano le email da questi indirizzi. Per usare un mittente diverso, modifica le impostazioni <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_FROM_EMAIL</span></code></a> e <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SERVER_EMAIL</span></code></a>.</p>\n</section>\n<section id=\"static-root-and-static-url\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> and <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a><a class=\"heading-anchor\" href=\"#static-root-and-static-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I file statici sono automaticamente serviti dal server di sviluppo. In produzione, devi definire una directory <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> dove <a class=\"reference internal\" href=\"/it/5.2/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> li copierà.</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/5.2/howto/static-files/\"><span class=\"doc\">Come gestire file statici (Es. immagini, JavaScript, CSS)</span></a> per ulteriori informazioni.</p>\n</section>\n<section id=\"media-root-and-media-url\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> e <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a><a class=\"heading-anchor\" href=\"#media-root-and-media-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I file multimediali sono caricati dagli utenti. Sono insicuri! Assicurati che il tuo webserver non li interpreti mai. Per esempio, se un utente carica un file <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code>, il server web non dovrebbe eseguirlo.</p>\n<p>Adesso è un buon momento per verificare la tua strategia di backup per questi files.</p>\n</section>\n</section>\n<section id=\"https\">\n<h2>HTTPS<a class=\"heading-anchor\" href=\"#https\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ogni sito web che permette agli utenti di fare login, dovrebbe applicare HTTPS per evitare la trasmissione degli access token in chiaro. In Django, gli access token includono il login/password, i cookie di sessione ed i token di reimpostazione della password. (Non puoi proteggere gran che i token di reimpostazione della password se li invii per email).</p>\n<p>Proteggere aree sensibili quali l’account utente o l’amministrazione non è sufficiente, perchè lo stesso cookie di sessione viene usato sia per HTTP che per HTTPS. Il tuo web server deve redirigere tutto il traffico HTTP ad HTTPS, e trasmettere solo richieste HTTPS a Django.</p>\n<p>Quando hai disposto HTTPS, abilita le seguenti impostazioni.</p>\n<section id=\"csrf-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-CSRF_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#csrf-cookie-secure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Abilitalo a <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> per evitare di trasmettere accidentalmente il cookie CSFR su HTTP.</p>\n</section>\n<section id=\"session-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#session-cookie-secure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Impostalo a <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> per evitare di trasmettere accidentalmente il cookie di sessione su HTTP.</p>\n</section>\n</section>\n<section id=\"performance-optimizations\">\n<h2>Ottimizzazione delle prestazioni<a class=\"heading-anchor\" href=\"#performance-optimizations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Impostare  <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a> disabilita molte feature che sono utili solo in fase di sviluppo. Inoltre, puoi mettere a punto le seguenti impostazioni.</p>\n<section id=\"sessions\">\n<h3>Sessioni<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Considera di usare <a class=\"reference internal\" href=\"/it/5.2/topics/http/sessions/#cached-sessions-backend\"><span class=\"std std-ref\">cached sessions</span></a> per migliorare la performance.</p>\n<p>Se usi le sessioni su database, <a class=\"reference internal\" href=\"/it/5.2/topics/http/sessions/#clearing-the-session-store\"><span class=\"std std-ref\">pulisci le vecchie sessioni</span></a> regolarmente per evitare di memorizzare dati non necessari.</p>\n</section>\n<section id=\"conn-max-age\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CONN_MAX_AGE</span></code></a><a class=\"heading-anchor\" href=\"#conn-max-age\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Abilitare <a class=\"reference internal\" href=\"/it/5.2/ref/databases/#persistent-database-connections\"><span class=\"std std-ref\">le connessioni persistenti ad database</span></a> può portare ad una piacevole riduzione dei tempi quando ci si connette agli account del database per una parte significativa del tempo di processamento della richiesta.</p>\n<p>Questo aiuta molto su virtual host con prestazioni di rete limitate.</p>\n</section>\n<section id=\"templates\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a><a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Abilitare il loader dei template in cache spesso migliora drasticamente le performance, perchè evita che il template venga compilato tutte le volte che deve essere mostrato. Quando <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>, il loader dei template con cache è abilitato automaticamente. Vedi <a class=\"reference internal\" href=\"/it/5.2/ref/templates/api/#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.loaders.cached.Loader</span></code></a> per avere più informazioni.</p>\n</section>\n</section>\n<section id=\"error-reporting\">\n<h2>Segnalazione errore<a class=\"heading-anchor\" href=\"#error-reporting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nel momento in cui fai push del codice in produzione, si spera sia robusto, ma non puoi aver ragione degli errori che non ti aspetti. Per fortuna, Django cattura gli errori e te li notifica in accordo.</p>\n<section id=\"logging\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a><a class=\"heading-anchor\" href=\"#logging\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Verifica la configurazione del sistema di logging prima di mettere il tuo sito in produzione, e verifica che funzioni come previsto appena inizi a ricevere del traffico.</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/5.2/topics/logging/\"><span class=\"doc\">Logging</span></a> per dettagli sul logging.</p>\n</section>\n<section id=\"admins-and-managers\">\n<h3><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> e <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a><a class=\"heading-anchor\" href=\"#admins-and-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> will be notified of 500 errors by email.</p>\n<p><a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> saranno notificati riguardo agli errori 404. <a class=\"reference internal\" href=\"/it/5.2/ref/settings/#std-setting-IGNORABLE_404_URLS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">IGNORABLE_404_URLS</span></code></a> può aiutare a filtrare report spuri.</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/5.2/howto/error-reporting/\"><span class=\"doc\">Come gestire il report degli errori</span></a> per dettagli sul report degli errori via email.</p>\n<aside class=\"admonition-error-reporting-by-email-doesn-t-scale-very-well admonition\">\n<p class=\"admonition-title\">La segnalazione degli errori via email non scala molto bene</p>\n<p>Considera di usare un sistema di monitoraggio degli errori come <a class=\"reference external\" href=\"https://docs.sentry.io/\">Sentry</a>, prima che la tua inbox sia inondata da errori. Sentry può anche aggregare i log.</p>\n</aside>\n</section>\n<section id=\"customize-the-default-error-views\">\n<h3>Personalizza la vista degli errori di default<a class=\"heading-anchor\" href=\"#customize-the-default-error-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django include viste e template per molti codici di errore HTTP. Potresti voler fare override dei template creando i seguenti templati nella directory radice dei template: 404.html`, <code class=\"docutils literal notranslate\"><span class=\"pre\">500.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">403.html</span></code> e``400.html``. Le <a class=\"reference internal\" href=\"/it/5.2/ref/views/#error-views\"><span class=\"std std-ref\">viste predefinite di errore</span></a>  dovrebbero essere sufficienti per il 99% delle applicazioni ma le puoi anche <a class=\"reference internal\" href=\"/it/5.2/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">customize them</span></a> .</p>\n</section>\n</section>","rootId":"deployment-checklist","toc":[{"title":"Lancia manage.py check --deploy","anchor":"run-manage-py-check-deploy","children":[]},{"title":"Switch away from manage.py runserver","anchor":"switch-away-from-manage-py-runserver","children":[]},{"title":"Configurazioni critiche","anchor":"critical-settings","children":[{"title":"SECRET_KEY","anchor":"secret-key","children":[]},{"title":"DEBUG","anchor":"debug","children":[]}]},{"title":"Configurazione dipendente dall’ambiente","anchor":"environment-specific-settings","children":[{"title":"ALLOWED_HOSTS","anchor":"allowed-hosts","children":[]},{"title":"CACHES","anchor":"caches","children":[]},{"title":"DATABASES","anchor":"databases","children":[]},{"title":"EMAIL_BACKEND ed impostazioni correlate","anchor":"email-backend-and-related-settings","children":[]},{"title":"STATIC_ROOT and STATIC_URL","anchor":"static-root-and-static-url","children":[]},{"title":"MEDIA_ROOT e MEDIA_URL","anchor":"media-root-and-media-url","children":[]}]},{"title":"HTTPS","anchor":"https","children":[{"title":"CSRF_COOKIE_SECURE","anchor":"csrf-cookie-secure","children":[]},{"title":"SESSION_COOKIE_SECURE","anchor":"session-cookie-secure","children":[]}]},{"title":"Ottimizzazione delle prestazioni","anchor":"performance-optimizations","children":[{"title":"Sessioni","anchor":"sessions","children":[]},{"title":"CONN_MAX_AGE","anchor":"conn-max-age","children":[]},{"title":"TEMPLATES","anchor":"templates","children":[]}]},{"title":"Segnalazione errore","anchor":"error-reporting","children":[{"title":"LOGGING","anchor":"logging","children":[]},{"title":"ADMINS e MANAGERS","anchor":"admins-and-managers","children":[]},{"title":"Personalizza la vista degli errori di default","anchor":"customize-the-default-error-views","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to guides","url":"/it/5.2/howto/"},{"docname":"howto/deployment/index","title":"Come distribuire Django","url":"/it/5.2/howto/deployment/"}],"prev":{"docname":"howto/deployment/asgi/uvicorn","title":"Come utilizzare Django con Uvicorn","url":"/it/5.2/howto/deployment/asgi/uvicorn/"},"next":{"docname":"howto/static-files/deployment","title":"Come distribuire file statici","url":"/it/5.2/howto/static-files/deployment/"},"formats":{"html":"/it/5.2/howto/deployment/checklist/","markdown":"/it/5.2/howto/deployment/checklist.md","json":"/it/5.2/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/it/5.2/howto/deployment/checklist/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}