{"title":"Filosofias de Projeto","version":"3.0","locale":"pt-br","docname":"misc/design-philosophies","url":"/pt-br/3.0/misc/design-philosophies/","canonical":"https://djangodocs.dev/pt-br/3.0/misc/design-philosophies/","summary":"Este documento explica algumas filosofias que os desenvolvedores do Django tem usado ao criar o framework. Seu objetivo é de explicar o passado e guiar o futuro. Em…","html":"<h1>Filosofias de Projeto<a class=\"heading-anchor\" href=\"#design-philosophies\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Este documento explica algumas filosofias que os desenvolvedores do Django tem usado ao criar o framework. Seu objetivo é de explicar o passado e guiar o futuro.</p>\n<section id=\"overall\">\n<h2>Em geral<a class=\"heading-anchor\" href=\"#overall\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"loose-coupling\">\n<span id=\"id1\"></span><h3>Acoplamento fraco<a class=\"heading-anchor\" href=\"#loose-coupling\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-0\">Um objetivo fundamental do Django é <a class=\"reference external\" href=\"http://wiki.c2.com/?CouplingAndCohesion\">acoplamento fraco e coesão forte</a>. As várias camadas do framework não devem “saber” uma das outras salvo se absolutamente necessário.</p>\n<p>Por exemplo, o sistema de templates não tem conhecimento sobre requisições web; a camada de banco de dados não conhece nada sobre como mostrar dados e o sistema de views não se importa com qual sistema de templates o programador usa.</p>\n<p>Embora o Django venha com uma pilha de soluções completa por conveniência, as peças desta pilha de soluções são independentes uma das outras sempre que possível.</p>\n</section>\n<section id=\"less-code\">\n<span id=\"id2\"></span><h3>Menos código<a class=\"heading-anchor\" href=\"#less-code\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Aplicações Django devem usar o mínimo possível de código; elas não devem ter código padrão. Django deve aproveitar as características dinâmicas do Python, como introspecção.</p>\n</section>\n<section id=\"quick-development\">\n<span id=\"id3\"></span><h3>Desenvolvimento Rápido<a class=\"heading-anchor\" href=\"#quick-development\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A questão dos frameworks web do século 21 é fazer com que aspectos enfadonhos do desenvolvimento web sejam rápidos. Django deve permitir que o desenvolvimento de aplicações web seja incrivelmente rápido.</p>\n</section>\n<section id=\"don-t-repeat-yourself-dry\">\n<span id=\"dry\"></span><h3>Não repita a si mesmo (DRY)<a class=\"heading-anchor\" href=\"#don-t-repeat-yourself-dry\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-1\">Cada conceito distinto e/ou dado deve estar em um, e apenas um, lugar. Redundância é ruim. Normalização é bom.</p>\n<p>O framework deve deduzir, razoavelmente, o máximo possível do mínimo possível.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>A <a class=\"reference external\" href=\"http://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>Explícito é melhor que implícito<a class=\"heading-anchor\" href=\"#explicit-is-better-than-implicit\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Esta é um dos princípios mais importantes de Python, listado em <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0020/\"><strong>PEP 20</strong></a>, que significa que o Django não deve utilizar mágica demais. Mágica deve ser utilizada apenas quando houver uma razão realmente boa para tal. Mágica vale a pena ser usada somente se criar uma enorme conveniência, impossível de outra forma, e não deve ser implementada de forma a confundir os desenvolvedores que estejam tentando aprender como utilizar uma funcionalidade.</p>\n</section>\n<section id=\"consistency\">\n<span id=\"id6\"></span><h3>Consistência<a class=\"heading-anchor\" href=\"#consistency\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O framework deve ser consistente em todos os níveis. Consistência se aplica a tudo, do nível mais baixo (estilo de codificação Python utilizado) ao nível mais alto (a “experiência” de se usar Django).</p>\n</section>\n</section>\n<section id=\"models\">\n<h2>Modelos<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id7\">\n<h3>Explícito é melhor que implícito<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Campos não devem assumir certos comportamentos baseados apenas no nome do campo. Isto requer muito conhecimento do sistema e é propenso a erros. Ao invés disso, o comportamento deve ser baseado em argumentos nomeados e, em alguns casos, no tipo do campo.</p>\n</section>\n<section id=\"include-all-relevant-domain-logic\">\n<h3>Inclui toda lógica do domínio relevante<a class=\"heading-anchor\" href=\"#include-all-relevant-domain-logic\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Modelos devem encapsular cada aspecto de um objeto, seguindo o padrão de projeto <a class=\"reference external\" href=\"https://www.martinfowler.com/eaaCatalog/activeRecord.html\">Active Record</a>  de Martin Fowler.</p>\n<p>Esse é o porque de ambos os dados representandos por um modelo e a informação sobre eles (seus nomes legíveis, opções como ordenação padrão, etc) são definidos na classe de modelo; toda a informação necessária para entender um dado modelo deveria ser amazenada <em>no</em> modelo.</p>\n</section>\n</section>\n<section id=\"database-api\">\n<h2>API de banco de dados<a class=\"heading-anchor\" href=\"#database-api\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os objetivos principais da API de banco de dados são:</p>\n<section id=\"sql-efficiency\">\n<h3>Eficiência SQL<a class=\"heading-anchor\" href=\"#sql-efficiency\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ele deveria executar comandos SQL o mínimo de vezes possível, e deveria otimizar os comandos internamente.</p>\n<p>É por isso que desenvolvedores devem chamar <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> explicitamente, ao invés do framework salvar coisas por trás das cenas silenciosamente.</p>\n<p>É também por isso que o método <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> existe. É um opcional para melhorar a performance para casos comuns de seleção de “cada objeto relacionado”.</p>\n</section>\n<section id=\"terse-powerful-syntax\">\n<h3>Concisa, sintaxe poderosa<a class=\"heading-anchor\" href=\"#terse-powerful-syntax\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A API de banco de dados deve permitir uma rica, declarações expressivas na menor syntaxe possível. Não deve se basear na importação de outros módulos e objetos auxiliares.</p>\n<p>“joins” devem ser realizados automaticamente, pode de trás das cenas, quando necessário.</p>\n<p>Cada objeto deve ser capaz de acessar cada objeto relaticionado, em todo o sistema. Este acesso deve funcionar nas duas vias.</p>\n</section>\n<section id=\"option-to-drop-into-raw-sql-easily-when-needed\">\n<h3>Opção de usar SQL nativo, quando necessário.<a class=\"heading-anchor\" href=\"#option-to-drop-into-raw-sql-easily-when-needed\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A API do banco de dados deve perceber que é um atalho mas não necessariamente um meio para todos os fins. O framework deve facilitar a escrita de SQL personalizado – declarações inteiras, ou somente cláusulas <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> personlizadas como parâmetros personalizados para chamadas de API.</p>\n</section>\n</section>\n<section id=\"url-design\">\n<h2>Definindo URL<a class=\"heading-anchor\" href=\"#url-design\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id8\">\n<h3>Acoplamento fraco<a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As URLs na aplicação Django não devem estar casadas com os componentes Python. Amarrar URLs a nomes de funções Python é uma coisa ruim e feia.</p>\n<p>Ao longos destas linhas, o sistema de URL do Django deve permitir URLs ara uma mesma aplicação ser diferentes em diferetes contextos. Por exemplo, um site pode colocar “stories” em <code class=\"docutils literal notranslate\"><span class=\"pre\">/stories/</span></code>, enquanto outro possa usar <code class=\"docutils literal notranslate\"><span class=\"pre\">/news/</span></code>.</p>\n</section>\n<section id=\"infinite-flexibility\">\n<h3>Flexibilidade Infinita<a class=\"heading-anchor\" href=\"#infinite-flexibility\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>As URLs deve ser tão flexíveis quanto possível. Qualquer URL concebível deve ser permitida.</p>\n</section>\n<section id=\"encourage-best-practices\">\n<h3>Encoraja melhores práticas<a class=\"heading-anchor\" href=\"#encourage-best-practices\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O framework deve tornar fácil (ou mesmo mais fácil) para um desenvolvedor definir URLs bonitas do que feias.</p>\n<p>Extensões de arquivo em URLs de páginas web devem ser evitadas.</p>\n<p>Vírgula no estilo Vignette em URLs merecem uma punição servera.</p>\n</section>\n<section id=\"definitive-urls\">\n<span id=\"id9\"></span><h3>URLs definitivas<a class=\"heading-anchor\" href=\"#definitive-urls\"><span class=\"visually-hidden\">Link para este cabeçalho</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> são duas URLs diferentes, e os robôs de mecanismos de busca (e algumas ferramentas de análize de tráfego Web) podem tratá-las como páginas separadas. O Django deve fazer um esforço para “normalizar” as URLs então os robôs de mecânismos de buscas não ficam confusos.</p>\n<p>Essa é a razão por de trás da definição <a class=\"reference internal\" href=\"/pt-br/3.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 de “template”<a class=\"heading-anchor\" href=\"#template-system\"><span class=\"visually-hidden\">Link para este cabeçalho</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>Separe a lógica da apresentação.<a class=\"heading-anchor\" href=\"#separate-logic-from-presentation\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nós vemos o sistema de “template” como uma ferramenta que controla a apresentação e a lógica relacionada a apresentação – e só isso. O sistema de template não deve dar suporte a funcionalidades que vão além deste objetivo básico.</p>\n</section>\n<section id=\"discourage-redundancy\">\n<h3>Desencoraja a redundância<a class=\"heading-anchor\" href=\"#discourage-redundancy\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A maioria dos sites web dinâmicos usam algum tipo de design para todo o site – um cabeçalho comum, um rodapé, barra de navegação etc. O sistema de “template” do Django deve tornar fácil armazenar estes elementos em um único local, eliminando duplicidade de código.</p>\n<p>Esta é a filosofia por de trás: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/templates/language/#template-inheritance\"><span class=\"std std-ref\">herança de template</span></a>.</p>\n</section>\n<section id=\"be-decoupled-from-html\">\n<h3>Esteja desacomplado do HTML.<a class=\"heading-anchor\" href=\"#be-decoupled-from-html\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O sistema de “template” não deve ser feito de modo que só entregue HTML. Ele deve ser igualmente bom em gerar outros formatos baseados em texto, ou texto simples apenas.</p>\n</section>\n<section id=\"xml-should-not-be-used-for-template-languages\">\n<h3>XML não deve ser usado para linguagens de “template”.<a class=\"heading-anchor\" href=\"#xml-should-not-be-used-for-template-languages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-4\">Usar um mecanismo XML para interpretar templates introduz um mundo inteiro novo de erros humanos na edição de “templates” – e incorre em um nível de custo inaceitável no processamento de “template”.</p>\n</section>\n<section id=\"assume-designer-competence\">\n<h3>Assume a competência do designer<a class=\"heading-anchor\" href=\"#assume-designer-competence\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O sistema de “template” não deve ser desenhado para que os “templates” sejam mostrados necessariamente de forma bonita em editores WYSIWYG como o dreamWeaver. Essa é uma limitação muito severa e não poderia permitir que a syntaxe fosse tão boa quanto é. O Django espera que autores de “templates” estejam confortáveis em editar o HTML diretamente.</p>\n</section>\n<section id=\"treat-whitespace-obviously\">\n<h3>Trate espaços em branco de maneira óbvia.<a class=\"heading-anchor\" href=\"#treat-whitespace-obviously\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O sistema de “template” não deve fazer coisas mágicas com espaços. Se um template inclui espaços, o sistema deve tratar espaços como trata o texto – somente mostrá-lo. Qualquer espaço em branco que não estiver dentro de uma tag de template deve ser mostrado.</p>\n</section>\n<section id=\"don-t-invent-a-programming-language\">\n<h3>Não inventa uma linguagem de programação<a class=\"heading-anchor\" href=\"#don-t-invent-a-programming-language\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O objetivo não é inventar uma linguagem de programação. O objetivo é oferecer somente o suficiente de funcionalidade programática, tal como ramificações e loops, que é essencial para tomar decisões relacionadas a apresentação. O <a class=\"reference internal\" href=\"/pt-br/3.0/topics/templates/#template-language-intro\"><span class=\"std std-ref\">Linguagem de Template do Django  (sigla DTL em inglês)</span></a>  tenta evitar lógica avançada.</p>\n<p>O sistema de “template” do Django reconhece que “templates” são na maioria das vezes escritos por <em>designers</em>, e não por <em>programadores</em>, e portanto não deve prezumir conhecimento em Python.</p>\n</section>\n<section id=\"safety-and-security\">\n<h3>Segurança<a class=\"heading-anchor\" href=\"#safety-and-security\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O sistema de template, tal como foi feito, deve coibir a inclusão de código malicioso – tal como comandos que deletam registros de banco de dados.</p>\n<p>Este é outro motivo pelo qual o sistema de template não permite código Python arbitrário.</p>\n</section>\n<section id=\"extensibility\">\n<h3>Extensibilidade<a class=\"heading-anchor\" href=\"#extensibility\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O sistema de “template” deve reconhecer que autores de “template” avançados talvez queiram extender sua tecnologia.</p>\n<p>Esta é a filosofia por trás das “tags” e filtros personalizadas.</p>\n</section>\n</section>\n<section id=\"views\">\n<h2>Views<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"simplicity\">\n<h3>Simplicidade<a class=\"heading-anchor\" href=\"#simplicity\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Escrever uma “view” deve ser tão simples quanto escrever uma função Python. Desenvolvedores não devem ter que instânciar uma classe enquanto uma função resolve.</p>\n</section>\n<section id=\"use-request-objects\">\n<h3>Use objetos de requisição<a class=\"heading-anchor\" href=\"#use-request-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>“Views” devem ter acesso a um objeto de requisição – um objeto que armazena metadados sobre a requisição corrente. O objeto deve ser passado diretamente a uma função “view”, ao invés da função “view” ter que acessar os dados de uma requisição vindos de uma variável global. Isso faz com que seja leve, limpo e fácil de testar “views” passando um objeto de requisição “de mentira”.</p>\n</section>\n<section id=\"id10\">\n<h3>Acoplamento fraco<a class=\"heading-anchor\" href=\"#id10\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Uma “view” não deve se preocupar sobre qual sistema de template o desenvolvedor usa – ou mesmo se um sistema de templates está sendo usado.</p>\n</section>\n<section id=\"differentiate-between-get-and-post\">\n<h3>Diferencie entre GET e POST.<a class=\"heading-anchor\" href=\"#differentiate-between-get-and-post\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GET e POST são distintintos; desenvolvedores devem usar explcitamente um ou outro. O framework tornar fácil a distinção entre dados de GET e POST.</p>\n</section>\n</section>\n<section id=\"cache-framework\">\n<span id=\"cache-design-philosophy\"></span><h2>Framework de Cache<a class=\"heading-anchor\" href=\"#cache-framework\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>O principais objetivos do Django <a class=\"reference internal\" href=\"/pt-br/3.0/topics/cache/\"><span class=\"doc\">framework de cache</span></a> são:</p>\n<section id=\"id11\">\n<h3>Menos código<a class=\"heading-anchor\" href=\"#id11\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O “cache” deve ser tão rápido quanto possível. Consequentemente, todo o código do framework em torno do “backend de cache” deve ser mantido no mínimo absoluto, especialmente para operações <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code>.</p>\n</section>\n<section id=\"id12\">\n<h3>Consistência<a class=\"heading-anchor\" href=\"#id12\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A API de “cache” deve fornecer uma interface consistente através de “backends de cache” diferentes.</p>\n</section>\n<section id=\"id13\">\n<h3>Extensibilidade<a class=\"heading-anchor\" href=\"#id13\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A API de “cache” deve ser extensível no nível da aplicação baseado nas necessidades dos desenvolvedores (por exemplo, veja <a class=\"reference internal\" href=\"/pt-br/3.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":"Em geral","anchor":"overall","children":[{"title":"Acoplamento fraco","anchor":"loose-coupling","children":[]},{"title":"Menos código","anchor":"less-code","children":[]},{"title":"Desenvolvimento Rápido","anchor":"quick-development","children":[]},{"title":"Não repita a si mesmo (DRY)","anchor":"don-t-repeat-yourself-dry","children":[]},{"title":"Explícito é melhor que implícito","anchor":"explicit-is-better-than-implicit","children":[]},{"title":"Consistência","anchor":"consistency","children":[]}]},{"title":"Modelos","anchor":"models","children":[{"title":"Explícito é melhor que implícito","anchor":"id7","children":[]},{"title":"Inclui toda lógica do domínio relevante","anchor":"include-all-relevant-domain-logic","children":[]}]},{"title":"API de banco de dados","anchor":"database-api","children":[{"title":"Eficiência SQL","anchor":"sql-efficiency","children":[]},{"title":"Concisa, sintaxe poderosa","anchor":"terse-powerful-syntax","children":[]},{"title":"Opção de usar SQL nativo, quando necessário.","anchor":"option-to-drop-into-raw-sql-easily-when-needed","children":[]}]},{"title":"Definindo URL","anchor":"url-design","children":[{"title":"Acoplamento fraco","anchor":"id8","children":[]},{"title":"Flexibilidade Infinita","anchor":"infinite-flexibility","children":[]},{"title":"Encoraja melhores práticas","anchor":"encourage-best-practices","children":[]},{"title":"URLs definitivas","anchor":"definitive-urls","children":[]}]},{"title":"Sistema de “template”","anchor":"template-system","children":[{"title":"Separe a lógica da apresentação.","anchor":"separate-logic-from-presentation","children":[]},{"title":"Desencoraja a redundância","anchor":"discourage-redundancy","children":[]},{"title":"Esteja desacomplado do HTML.","anchor":"be-decoupled-from-html","children":[]},{"title":"XML não deve ser usado para linguagens de “template”.","anchor":"xml-should-not-be-used-for-template-languages","children":[]},{"title":"Assume a competência do designer","anchor":"assume-designer-competence","children":[]},{"title":"Trate espaços em branco de maneira óbvia.","anchor":"treat-whitespace-obviously","children":[]},{"title":"Não inventa uma linguagem de programação","anchor":"don-t-invent-a-programming-language","children":[]},{"title":"Segurança","anchor":"safety-and-security","children":[]},{"title":"Extensibilidade","anchor":"extensibility","children":[]}]},{"title":"Views","anchor":"views","children":[{"title":"Simplicidade","anchor":"simplicity","children":[]},{"title":"Use objetos de requisição","anchor":"use-request-objects","children":[]},{"title":"Acoplamento fraco","anchor":"id10","children":[]},{"title":"Diferencie entre GET e POST.","anchor":"differentiate-between-get-and-post","children":[]}]},{"title":"Framework de Cache","anchor":"cache-framework","children":[{"title":"Menos código","anchor":"id11","children":[]},{"title":"Consistência","anchor":"id12","children":[]},{"title":"Extensibilidade","anchor":"id13","children":[]}]}],"breadcrumbs":[{"docname":"misc/index","title":"Meta-documentação e miscelâneas","url":"/pt-br/3.0/misc/"}],"prev":{"docname":"misc/api-stability","title":"Estabilidade da API","url":"/pt-br/3.0/misc/api-stability/"},"next":{"docname":"misc/distributions","title":"Distribuição do Django feita por terceiros","url":"/pt-br/3.0/misc/distributions/"},"formats":{"html":"/pt-br/3.0/misc/design-philosophies/","markdown":"/pt-br/3.0/misc/design-philosophies.md","json":"/pt-br/3.0/misc/design-philosophies.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/misc/design-philosophies.txt","official":"https://docs.djangoproject.com/pt-br/3.0/misc/design-philosophies/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}