{"title":"Design di filosofie","version":"6.0","locale":"it","docname":"misc/design-philosophies","url":"/it/6.0/misc/design-philosophies/","canonical":"https://djangodocs.dev/it/6.0/misc/design-philosophies/","summary":"Questo documento spiega alcuni concetti fondamentali della filosofia Django che gli sviluppatori hanno usato nella creazione del framework. Lo scopo primario è…","html":"<h1>Design di filosofie<a class=\"heading-anchor\" href=\"#design-philosophies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Questo documento spiega alcuni concetti fondamentali della filosofia Django che gli sviluppatori hanno usato nella creazione del framework. Lo scopo primario è quello di spiegare il passato e guidare verso il futuro.</p>\n<section id=\"overall\">\n<h2>!!Complessivamente<a class=\"heading-anchor\" href=\"#overall\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"loose-coupling\">\n<span id=\"id1\"></span><h3>Accoppiamento lasco<a class=\"heading-anchor\" href=\"#loose-coupling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-0\">Uno degli obiettivi primari dello stack di Django è <a class=\"reference external\" href=\"https://wiki.c2.com/?CouplingAndCohesion\">loose coupling and tight cohesion</a>. I vari layer del framework non dovrebbero «essere a conoscenza» l’uno dell’altro se non strettamente necessario.</p>\n<p>Per esempio, il sistema di template non sa nulla delle richieste web, il layer di database non sa nulla di come vengano mostrati i dati ed il sistema delle views non si interessa di quale sistema di template il programmatore utilizzi.</p>\n<p>Sebbene Django venga fornito come full stack per convenienza, i pezzi dello stack sono indipendenti uno dall’altro quando possibile.</p>\n</section>\n<section id=\"less-code\">\n<span id=\"id2\"></span><h3>Meno codice<a class=\"heading-anchor\" href=\"#less-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le applicazioni Django dovrebbero usare meno codice possibile; non dovrebbero esserci boilerplate. Django dovrebbe trarre pieno vantaggio delle capacità dinamiche di Python, come l’introspezione.</p>\n</section>\n<section id=\"quick-development\">\n<span id=\"id3\"></span><h3>Sviluppo rapido<a class=\"heading-anchor\" href=\"#quick-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il punto di utilizzare un framework web nel ventunesimo secolo è rendere gli aspetti noiosi dello sviluppo web veloci. Django dovrebbe permettere uno sviluppo web incredibilmente rapido.</p>\n</section>\n<section id=\"don-t-repeat-yourself-dry\">\n<span id=\"dry\"></span><h3>Non ti ripetere! (DRY – Don’t repeat yourself)<a class=\"heading-anchor\" href=\"#don-t-repeat-yourself-dry\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-1\">Ogni singolo concetto e/o pezzo di dato dovrebbe vivere in uno ed un solo posto solo. La ridondanza è una cattiva abitudine. La normalizzazione è una buona abitudine.</p>\n<p>Il framework, entro limiti ragionevoli, dovrebbe dedurre il più possibile dal meno possibile.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Vedi anche</p>\n<p>La <a class=\"reference external\" href=\"https://wiki.c2.com/?DontRepeatYourself\">discussion of DRY on the Portland Pattern Repository</a></p>\n</aside>\n</section>\n<section id=\"explicit-is-better-than-implicit\">\n<span id=\"id5\"></span><h3>Esplicito è meglio di implicito<a class=\"heading-anchor\" href=\"#explicit-is-better-than-implicit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Questo è un principio primario di Python presente in <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0020/\"><strong>PEP 20</strong></a>, e significa che Django non dovrebbe essere troppo «magico». La magia non dovrebbe esserci a meno che non ci siano delle valide ragioni. La magia merita di essere usata solo se crea grandi vantaggi non raggiungibili in altri modi, e non è implementata in modo da confondere gli sviluppatori che tentano di imparare come usare una feature.</p>\n</section>\n<section id=\"consistency\">\n<span id=\"id6\"></span><h3>Consistenza<a class=\"heading-anchor\" href=\"#consistency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il framework dovrebbe essere consistente a tutti i livelli. La consistenza si applica a tutto, dal low-level (lo stile di codice Python usato) all” high-level («l’esperienza» di uso di Django.)</p>\n</section>\n</section>\n<section id=\"models\">\n<h2>Modelli<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id7\">\n<h3>Esplicito è meglio di implicito<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I campi non dovrebbero dare per scontati certi comportamenti basati solo sul nome del campo. Questo richiederebbe troppa conoscenza del sistema ed è incline ad errori. Invece, i comportamenti dovrebbero essere basati su argomenti chiave e, in alcuni casi, sul tipo del campo.</p>\n</section>\n<section id=\"include-all-relevant-domain-logic\">\n<h3>Includere tutte le logiche di dominio rilevanti<a class=\"heading-anchor\" href=\"#include-all-relevant-domain-logic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I modelli dovrebbero incapsulare ogni aspetto di un «oggetto» seguendo il pattern design <a class=\"reference external\" href=\"https://www.martinfowler.com/eaaCatalog/activeRecord.html\">Active Record</a> definito da Martin Fowler</p>\n<p>Per questo motivo, i dati sono rappresentati da un modello e dalle informazioni su di essi (un nome di facile lettura, opzioni come l’ordinamento di default, ecc…) sono definiti nella classe modello; tutte le informazioni necessarie per comprendere un modello dovrebbero trovarsi <em>nel</em> modello.</p>\n</section>\n</section>\n<section id=\"database-api\">\n<h2>Database API<a class=\"heading-anchor\" href=\"#database-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I principali obiettivi delle API del database sono:</p>\n<section id=\"sql-efficiency\">\n<h3>Efficenza SQL<a class=\"heading-anchor\" href=\"#sql-efficiency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dovrebbe eseguire dichiarazioni SQL il minor numero di volte possibile, ed ottimizzare le dichiarazioni internamente.</p>\n<p>Per questo è necessario che gli sviluppatori chiamino <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> esplicitamente, piuttosto che lasciare al framework il compito di salvarle in background.</p>\n<p>Anche per questo motivo esistono i metodi  <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> di <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>. È un booster di performance opzionale per i casi più comuni di selezioni di «ogni oggetto correlato».</p>\n</section>\n<section id=\"terse-powerful-syntax\">\n<h3>Sintassi potente e concisa<a class=\"heading-anchor\" href=\"#terse-powerful-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le API del database dovrebbero permettere dichiarazioni ricche ed espressive con la minima sintassi possibile. Non dovrebbero fare affidamento sulle importazioni di altri moduli o su oggetti helper.</p>\n<p>Le Join dovrebbero essere eseguite automaticamente, in background, quando necessario.</p>\n<p>Ogni oggetto dovrebbe essere capace di accedere ad ogni oggetto relazionato, globalmente. Questo tipo di accesso dovrebbe funzionare in entrambi i sensi.</p>\n</section>\n<section id=\"option-to-drop-into-raw-sql-easily-when-needed\">\n<h3>Opzioni da usare nelle query SQL grezze, quando necessario.<a class=\"heading-anchor\" href=\"#option-to-drop-into-raw-sql-easily-when-needed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La API per il database dovrebbe capire che è una scorciatoia ma non necessariamente qualcosa di estremamente importante. Il framework dovrebbe rendere semplice scrivere dell” SQL personalizzato - intere espressioni o semplicemente clausole «WHERE» come parametri custom delle chiamate API.</p>\n</section>\n</section>\n<section id=\"url-design\">\n<h2>Design dell’URL<a class=\"heading-anchor\" href=\"#url-design\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id8\">\n<h3>Accoppiamento lasco<a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le URL in una app Django non dovrebbero essere accoppiate al codice Python sottostante. Legare le URL ai nomi di funzioni Python è una cosa brutta e cattiva.</p>\n<p>In tal senso, il sistema di URL di Django dovrebbe permettere che URL nella stessa app siano differenti per contesti differenti. Per esempio, un sito potrebbe collocare le storie in <code class=\"docutils literal notranslate\"><span class=\"pre\">/stories/</span></code>, mentre un’altro potrebbe usare <code class=\"docutils literal notranslate\"><span class=\"pre\">/news/</span></code>.</p>\n</section>\n<section id=\"infinite-flexibility\">\n<h3>Flessibilità infinita<a class=\"heading-anchor\" href=\"#infinite-flexibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le URL dovrebbero essere il più flessibili possibile. Qualsiasi URL design che possa essere concepito, dovrebbe essere permesso.</p>\n</section>\n<section id=\"encourage-best-practices\">\n<h3>Incoraggiare le best practices<a class=\"heading-anchor\" href=\"#encourage-best-practices\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il framework dovrebbe rendere semplice (o perfino semplicissima), per uno sviluppatore, la creazione di URL belle piuttosto che brutte.</p>\n<p>Le estensioni dei file nelle URL delle pagine web dovrebbero essere evitate.</p>\n<p>Le virgolette in stile «vignetta» nelle URL meritano di essere punite severamente.</p>\n</section>\n<section id=\"definitive-urls\">\n<span id=\"id9\"></span><h3>URL definitive<a class=\"heading-anchor\" href=\"#definitive-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-3\">Tecnicamente, <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> sono due URL differenti ed i robot dei motori di ricerca (ed alcuni tool di analisi del traffico) li tratterebbero come pagine diverse. Django dovrebbe fare uno sforzo per «normalizzare» le URL in modo che i robot dei motori di ricerca non cadano in confusione.</p>\n<p>Questa è il ragionamento che sta alla base dell’impostazione <a class=\"reference internal\" href=\"/it/6.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a>.</p>\n</section>\n</section>\n<section id=\"template-system\">\n<h2>Sistema dei template<a class=\"heading-anchor\" href=\"#template-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"separate-logic-from-presentation\">\n<span id=\"separation-of-logic-and-presentation\"></span><h3>Dividere la logica dalla presentazione<a class=\"heading-anchor\" href=\"#separate-logic-from-presentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Noi vediamo un sistema di template come un tool che controlla la presentazione e le logiche correlate alla presentazione – e questo è quanto. Il sistema di template non dovrebbe gestire funzionalità che vanno oltre questo obiettivo di base.</p>\n</section>\n<section id=\"discourage-redundancy\">\n<h3>Scoraggiare la ridondanza<a class=\"heading-anchor\" href=\"#discourage-redundancy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La maggior parte dei siti dinamici utilizza uno stile comune a tutto il sito - una intestazione comune, un piè di pagina, una barra di navigazione, ecc. Il sistema di template di Django dovrebbe rendere facile mettere questi elementi in un unico posto, eliminando il codice duplicato.</p>\n<p>Questa è la filosofia dietro all” <a class=\"reference internal\" href=\"/it/6.0/ref/templates/language/#template-inheritance\"><span class=\"std std-ref\">ereditarietà dei template</span></a>.</p>\n</section>\n<section id=\"be-decoupled-from-html\">\n<h3>Essere disaccoppiato dall’HTML<a class=\"heading-anchor\" href=\"#be-decoupled-from-html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il sistema template non dovrebbe essere strutturato in modo tale da ottenere solo HTML. Dovrebbe essere ugualmente valido per generare anche altri formati basati sul testo o anche solo plain text.</p>\n</section>\n<section id=\"xml-should-not-be-used-for-template-languages\">\n<h3>XML non dovrebbe essere usato per linguaggi di template<a class=\"heading-anchor\" href=\"#xml-should-not-be-used-for-template-languages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-4\">L’utilizzo di un motore XML per fare il parse dei template introduce nuovi errori umani nell’editing dei template – ed introduce un livello inaccettabile di overhead nel processamento dei template.</p>\n</section>\n<section id=\"assume-designer-competence\">\n<h3>Ingaggia designer competenti<a class=\"heading-anchor\" href=\"#assume-designer-competence\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il sistema di template non dovrebbe essere progettato in modo da poter mostrare bene i template negli editor WYSIWYG, come ad esempio Dreamweaver. Sarebbe una limitazione troppo grande e non permette alla sintassi di essere bella come è. Django si aspetta che gli autori dei template siano in grado di fare editing direttamente sull’HTML.</p>\n</section>\n<section id=\"treat-whitespace-obviously\">\n<h3>Trattare gli spazi bianchi ovviamente<a class=\"heading-anchor\" href=\"#treat-whitespace-obviously\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il sistema di template non dovrebbe fare magie con gli spazi bianchi. Se un template include spazi bianchi, il sistema dovrebbe trattarli così come tratta il testo – mostrandoli. Ogni spazio bianco che non si trova in un template tag dovrebbe essere mostrato.</p>\n</section>\n<section id=\"don-t-invent-a-programming-language\">\n<h3>Non inventare un linguaggio di programmazione<a class=\"heading-anchor\" href=\"#don-t-invent-a-programming-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La finalità non è quella di inventare un linguaggio di programmazione. Il fine è quello di offrire un buon numero di funzionalità «da programmazione», come il branching ed il looping, essenziali per le decisioni a livello di presentazione. Il :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Linguaggio dei Template di Django (DTL)&lt;template-language-intro&gt; mira ad evitare la logica avanzata.</p>\n</section>\n<section id=\"safety-and-security\">\n<h3>Sicurezza e security<a class=\"heading-anchor\" href=\"#safety-and-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il sistema di template, out of the box, dovrebbe vietare l’iniezione di codice malevolo – come per esempio un comando che cancella record del database.</p>\n<p>Questo è un altro motivo per il quale il sistema di template non permette l’utilizzo di codice Python arbitrario.</p>\n</section>\n<section id=\"extensibility\">\n<h3>Estensibilità<a class=\"heading-anchor\" href=\"#extensibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Il sistema di template dovrebbe riconoscere che autori di template avanzati potrebbero voler estendere la sua tecnologia.</p>\n<p>Questa è la filosofia che sta dietro ai filtri ed ai template tag personalizzati.</p>\n</section>\n</section>\n<section id=\"views\">\n<h2>View<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"simplicity\">\n<h3>Semplicità<a class=\"heading-anchor\" href=\"#simplicity\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Scrivere una vista/view dovrebbe essere semplice come scrivere una funzione Python. Gli sviluppatori non dovrebbero preoccuparsi di istanziare una classe quando potrebbe andare bene una funzione.</p>\n</section>\n<section id=\"use-request-objects\">\n<h3>Usare oggetti per le richieste<a class=\"heading-anchor\" href=\"#use-request-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le viste/views dovrebbero avere accesso ad un oggetto “request” – un oggetto che fornisce metadati sulla richiesta attuale. L’oggetto dovrebbe essere passato direttamente ad una funzione view, piuttosto che lasciare che la funzione view abbia accesso ad una variabile globale con i dati richiesti. Questo rende semplice, pulito e facile, testare la view passando un oggetto request fittizio.</p>\n</section>\n<section id=\"id10\">\n<h3>Accoppiamento lasco<a class=\"heading-anchor\" href=\"#id10\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Una view non si dovrebbe curare di quale sistema di template utilizza lo sviluppatore - e nemmeno del fatto che si utilizzi o meno un sistema di template.</p>\n</section>\n<section id=\"differentiate-between-get-and-post\">\n<h3>Distinguere tra GET e POST<a class=\"heading-anchor\" href=\"#differentiate-between-get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GET e POST sono distinti; gli sviluppatori dovrebbero espressamente usare l’uno o l’altro. Il framework dovrebbe rendere facile la distinzione di dati GET e POST.</p>\n</section>\n</section>\n<section id=\"cache-framework\">\n<span id=\"cache-design-philosophy\"></span><h2>Cache Framework<a class=\"heading-anchor\" href=\"#cache-framework\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Gli obbiettivi primari di Django <a class=\"reference internal\" href=\"/it/6.0/topics/cache/\"><span class=\"doc\">cache framework</span></a>  sono :</p>\n<section id=\"id11\">\n<h3>Meno codice<a class=\"heading-anchor\" href=\"#id11\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A cache should be as fast as possible. Hence, all framework code surrounding\nthe cache backend should be kept to the absolute minimum, especially for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> operations.</p>\n</section>\n<section id=\"id12\">\n<h3>Consistenza<a class=\"heading-anchor\" href=\"#id12\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La API della cache dovrebbe offrire una interfaccia consistente per tutti i differenti backend di cache.</p>\n</section>\n<section id=\"id13\">\n<h3>Estensibilità<a class=\"heading-anchor\" href=\"#id13\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La API della cache dovrebbe essere estendibile al livello di applicazione a seconda delle esigenze dello sviluppatore (per esempio, vedi <a class=\"reference internal\" href=\"/it/6.0/topics/cache/#cache-key-transformation\"><span class=\"std std-ref\">Cache key transformation</span></a>)</p>\n</section>\n</section>","rootId":"design-philosophies","toc":[{"title":"!!Complessivamente","anchor":"overall","children":[{"title":"Accoppiamento lasco","anchor":"loose-coupling","children":[]},{"title":"Meno codice","anchor":"less-code","children":[]},{"title":"Sviluppo rapido","anchor":"quick-development","children":[]},{"title":"Non ti ripetere! (DRY – Don’t repeat yourself)","anchor":"don-t-repeat-yourself-dry","children":[]},{"title":"Esplicito è meglio di implicito","anchor":"explicit-is-better-than-implicit","children":[]},{"title":"Consistenza","anchor":"consistency","children":[]}]},{"title":"Modelli","anchor":"models","children":[{"title":"Esplicito è meglio di implicito","anchor":"id7","children":[]},{"title":"Includere tutte le logiche di dominio rilevanti","anchor":"include-all-relevant-domain-logic","children":[]}]},{"title":"Database API","anchor":"database-api","children":[{"title":"Efficenza SQL","anchor":"sql-efficiency","children":[]},{"title":"Sintassi potente e concisa","anchor":"terse-powerful-syntax","children":[]},{"title":"Opzioni da usare nelle query SQL grezze, quando necessario.","anchor":"option-to-drop-into-raw-sql-easily-when-needed","children":[]}]},{"title":"Design dell’URL","anchor":"url-design","children":[{"title":"Accoppiamento lasco","anchor":"id8","children":[]},{"title":"Flessibilità infinita","anchor":"infinite-flexibility","children":[]},{"title":"Incoraggiare le best practices","anchor":"encourage-best-practices","children":[]},{"title":"URL definitive","anchor":"definitive-urls","children":[]}]},{"title":"Sistema dei template","anchor":"template-system","children":[{"title":"Dividere la logica dalla presentazione","anchor":"separate-logic-from-presentation","children":[]},{"title":"Scoraggiare la ridondanza","anchor":"discourage-redundancy","children":[]},{"title":"Essere disaccoppiato dall’HTML","anchor":"be-decoupled-from-html","children":[]},{"title":"XML non dovrebbe essere usato per linguaggi di template","anchor":"xml-should-not-be-used-for-template-languages","children":[]},{"title":"Ingaggia designer competenti","anchor":"assume-designer-competence","children":[]},{"title":"Trattare gli spazi bianchi ovviamente","anchor":"treat-whitespace-obviously","children":[]},{"title":"Non inventare un linguaggio di programmazione","anchor":"don-t-invent-a-programming-language","children":[]},{"title":"Sicurezza e security","anchor":"safety-and-security","children":[]},{"title":"Estensibilità","anchor":"extensibility","children":[]}]},{"title":"View","anchor":"views","children":[{"title":"Semplicità","anchor":"simplicity","children":[]},{"title":"Usare oggetti per le richieste","anchor":"use-request-objects","children":[]},{"title":"Accoppiamento lasco","anchor":"id10","children":[]},{"title":"Distinguere tra GET e POST","anchor":"differentiate-between-get-and-post","children":[]}]},{"title":"Cache Framework","anchor":"cache-framework","children":[{"title":"Meno codice","anchor":"id11","children":[]},{"title":"Consistenza","anchor":"id12","children":[]},{"title":"Estensibilità","anchor":"id13","children":[]}]}],"breadcrumbs":[{"docname":"misc/index","title":"Meta-documentazione e miscellanea","url":"/it/6.0/misc/"}],"prev":{"docname":"misc/api-stability","title":"Stabilità API","url":"/it/6.0/misc/api-stability/"},"next":{"docname":"misc/distributions","title":"Distribuzioni di terze parti di Django","url":"/it/6.0/misc/distributions/"},"formats":{"html":"/it/6.0/misc/design-philosophies/","markdown":"/it/6.0/misc/design-philosophies.md","json":"/it/6.0/misc/design-philosophies.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/misc/design-philosophies.txt","official":"https://docs.djangoproject.com/it/6.0/misc/design-philosophies/","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"]}