{"title":"Lista de verificação para distribuição","version":"1.9","locale":"pt-br","docname":"howto/deployment/checklist","url":"/pt-br/1.9/howto/deployment/checklist/","canonical":"https://djangodocs.dev/pt-br/1.9/howto/deployment/checklist/","summary":"A internet é um ambiente hostil. Antes de distribuir um projeto Django, você deve perder algum tempo para revisar suas configurações, com segurança, desempenho, e…","html":"<h1>Lista de verificação para distribuição<a class=\"heading-anchor\" href=\"#deployment-checklist\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>A internet é um ambiente hostil. Antes de distribuir um projeto Django, você deve perder algum tempo para revisar suas configurações, com segurança, desempenho, e operações em mente.</p>\n<p>O Django inclui muitos <a class=\"reference internal\" href=\"/pt-br/1.9/topics/security/\"><span class=\"doc\">security features</span></a>. Agumas são embutidas e sempre habilitadas. Outras são opcionais porque nem sempre são apropriadas, ou porque são inconvenientes para desenvolvimento. Por exemplo, forçar HTTPS talvez não seja bom para todos os websites e não prático para desenvolvimento local.</p>\n<p>Otimização de desempenho são outra categoria de “perde-ganha” com a conveniência. Por exemplo, “cache” é útil em produção, mas não em desenvolvimento. Necessidades de relatórios de erros também são amplamente diferentes.</p>\n<p>As seguinte lista de verificação inclui configurações que:</p>\n<ul class=\"simple\">\n<li><p>devem ser configuradas propriamente para que o Django fornece o nível esperado de segurança.</p></li>\n<li><p>espera-se que sejam diferentes  em cada ambiente.</p></li>\n<li><p>habilitam características de segurança opcionais;</p></li>\n<li><p>habilitam otimização de desempenho.</p></li>\n<li><p>fornece relatório de erro.</p></li>\n</ul>\n<p>Muitas destas configurações são sensíveis e devem ser tratadas confidencialmente. Se você está publicando o código fonte do seu projeto, uma prática comum é publicar configurações adequadas para desenvolvimento, e usar o módulo de configuração para produção.</p>\n<section id=\"run-manage-py-check-deploy\">\n<h2>Execute <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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Algumas das verificações descritas abaixo podem ser automatizadas usando a opção <a class=\"reference internal\" href=\"/pt-br/1.9/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>. Assegure-se de executá-lo com o arquivo de configuração como descrito  na documentação de configuração.</p>\n</section>\n<section id=\"critical-settings\">\n<h2>Configurações críticas.<a class=\"heading-anchor\" href=\"#critical-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"secret-key\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>A chave secreta deve ser um valor randômico e longo e deve ser mantido em segredo</strong></p>\n<p>Tenha ceteza que a chave usada em produção não é usada em nenhum outro local e evite “commitar” isso no código fonte. Isso reduz o número de vetores dos quais um atacante possa acessar a chave.</p>\n<p>Ao invés de “hardecodear” a chave secreta no módulo de configuração, considere carrega-lo de uma variável de 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<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=\"s1\">&#39;SECRET_KEY&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ou de um arquivo:</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=\"s1\">&#39;/etc/secret_key.txt&#39;</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</section>\n<section id=\"debug\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>Nunca habilite o debug em produção</strong></p>\n<p>Certamente você desenvolvimento seu projeto com  <a class=\"reference internal\" href=\"/pt-br/1.9/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>, já que isso habilita características convenientes como “tracebakcs” no seu browser.</p>\n<p>Para o ambiente de produção, embora, isso é realmente uma má idéia, porque ele abre uma série de informações sobre seu projeto: dicas de seu código fonte, variáveis locais, configurações, bibliotecas usadas, etc.</p>\n</section>\n</section>\n<section id=\"environment-specific-settings\">\n<h2>Configurações específicas de configurações<a class=\"heading-anchor\" href=\"#environment-specific-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"allowed-hosts\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando <a class=\"reference internal\" href=\"/pt-br/1.9/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>, o Django não irá funcionar de maneira alguma sem um valor adequado para o <a class=\"reference internal\" href=\"/pt-br/1.9/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>Essa configuração é requerida para proteger seu site de ataques CSRF. Se usar um caracter corínga, você deve fazer sua própria validação do cabeçalho HTTP do <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code>, ou de outra maneira tenha certeza que você não está vulnerável a esse tipo de ataque.</p>\n<p>Deve-se também configurar o servidor Web que está a frente do Django para validar o host. Ele deve responder com um erro de página estática ou ignorar a requisição para hosts incorretos ao invés de repassar o request para o Django. Desta maneira evitará erros espurios no seu log do Django (ou emails se tiver configurado para isso). Por exemplo, no nginx talvez configure o servidor padrão para retornar “444 no response” quando host não reconhecido:</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=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se está usando “cache”, parâmetros de conexões talvez sejam diferentes em desenvolvimento e em produção.</p>\n<p>Servidores de “cache” tem em geral uma autenticação fraca. Assegure-se que somente aceite conexões de seus servidores de aplicações.</p>\n<p>Se estiver usando Memcached, considere usar <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/sessions/#cached-sessions-backend\"><span class=\"std std-ref\">sessões cacheadas</span></a>  para melhorar o desempenho.</p>\n</section>\n<section id=\"databases\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Parâmetros de conexões de bancos de dados são provavelmente diferentes em desenvolvimento e em produção.</p>\n<p>Senhas de bancos de dados são muito sensíveis. Você deve protegê-las tal como o <a class=\"reference internal\" href=\"/pt-br/1.9/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>Para máxima segurança, certifique que os servidores de bancos de dados somente aceitem conexões de seus servidores de aplicação.</p>\n<p>Se não configurou backup para seu banco de dados, faça isso já!</p>\n</section>\n<section id=\"email-backend-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> e configurações relacionadas<a class=\"heading-anchor\" href=\"#email-backend-and-related-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se seu site envia e-mails, estes valores precisam ser definidos corretamente.</p>\n<p>Por padrão, o Django envia email de <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>. Entretanto, alguns provedores de email rejeitam emails destes endereços. Para usar endereços de envio diferentes, modifique as configurações <a class=\"reference internal\" href=\"/pt-br/1.9/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=\"/pt-br/1.9/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=\"/pt-br/1.9/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Arquivos estáticos são automaticamente servidos pelo servidor de desenvolvimento. Em produção, você deve definir o diretório <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> onde o <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> irá copiá-los.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/1.9/howto/static-files/\"><span class=\"doc\">Gerenciamento de arquivos estáticos (exemplo: imagens, JavaScript, CSS)</span></a> para mais informações.</p>\n</section>\n<section id=\"media-root-and-media-url\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Arquivos de media são enviados por usuários. Não são confiáveis! Assegure-se que seu servidor web nunca tente interpretá-los. Por exemplo, se um usuário enviar um arquivo <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code>, o servidor web não deve executá-lo.</p>\n<p>Agora é uma boa hora para verificar sua estratégia de backup para estes arquivos.</p>\n</section>\n</section>\n<section id=\"https\">\n<h2>HTTPS<a class=\"heading-anchor\" href=\"#https\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Qualquer website que possibilita autenticação de usuários deveria exigir HTTPS em todo o site para evitar a transmissão de tokens planos. No Djano, os tokes de acesso incluem o login/senha, a “cookie” da sessão e o token de reset de senha. (Não é possível fazer muito para proteger bem os tokens de reset de senha se são enviados via email).</p>\n<p>Proteger áreas sensíveis como a conta do usuário e o admin não são sificientes, porque o mesmo “cookie” de sessão é usado para HTTP e HTTPS. Seu servidor WEB deve redirecionar todas as requisições HTTP para HTTPS, e somente transmitir requests HTTPS para o Django.</p>\n<p>Uma vez que tenha configurado HTTPS, habilite as seguintes configurações.</p>\n<section id=\"csrf-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Defina este como <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> para evitar transmissão do “cookie” de CSRF através de HTTP acidentalmente.</p>\n</section>\n<section id=\"session-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Defina este como <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> para evitar transmissão do “cookie” da sessão através de HTTP acidentalmente.</p>\n</section>\n</section>\n<section id=\"performance-optimizations\">\n<h2>Otimizações de desempenho.<a class=\"heading-anchor\" href=\"#performance-optimizations\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A Configuração <a class=\"reference internal\" href=\"/pt-br/1.9/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> desabilita muitas características que são úteis somente em desenvolvimento. Além disso, você pode ajustar as seguintes configurações.</p>\n<section id=\"conn-max-age\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Habilitando <a class=\"reference internal\" href=\"/pt-br/1.9/ref/databases/#persistent-database-connections\"><span class=\"std std-ref\">persistent database connections</span></a> pode resultar em um bom aumento de velocidade no tempo de processamento de requisições quando se conecta a contas do banco de dados.</p>\n<p>Isso ajuda muito os Hosts virtualizados com desempenho de network limitado.</p>\n</section>\n<section id=\"templates\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Habilitando o cache do carregador de “templates” muitas vezes aumenta o desempenho dramaticamente, já que isso evita compilar cada template todas as vezes que precisa ser renderizado. Veja o <a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/#template-loaders\"><span class=\"std std-ref\">template loaders docs</span></a> para mais informações.</p>\n</section>\n</section>\n<section id=\"error-reporting\">\n<h2>Relatório de erro<a class=\"heading-anchor\" href=\"#error-reporting\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Na hora em que o código é enviado para produção, espera-se robustez, mas não podemos ter erros inexperados. Menos mal, o Django pode capturar estes erros e noticá-los de acordo.</p>\n<section id=\"logging\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Reveja a sua configuração de log antes de colocar seu website em produção, e verifique se este está funcionando como esperado tão logo receba algum tráfego.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/1.9/topics/logging/\"><span class=\"doc\">Logging</span></a> para detalhes de log.</p>\n</section>\n<section id=\"admins-and-managers\">\n<h3><a class=\"reference internal\" href=\"/pt-br/1.9/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=\"/pt-br/1.9/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 para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> será notificado de erros to tipo 500 por email.</p>\n<p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> serão notificados de erros do tipo 404. <a class=\"reference internal\" href=\"/pt-br/1.9/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> pode ajudar a filtrar erros ilegítimos.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/1.9/howto/error-reporting/\"><span class=\"doc\">Relatório de erro</span></a> para detalhes sobre relatórios de erros por email.</p>\n<aside class=\"admonition-error-reporting-by-email-doesn-t-scale-very-well admonition\">\n<p class=\"admonition-title\">Relatórios de erros por email não escalam muito bem.</p>\n<p>Considere usar um sistema de monitoramento de erros tal como o <a class=\"reference external\" href=\"https://docs.getsentry.com/\">Sentry</a> antes que sua caixa postal seja cheia de relatórios. O Sentry pode também agregar logs.</p>\n</aside>\n</section>\n<section id=\"customize-the-default-error-views\">\n<h3>Customize as views de erro padrão<a class=\"heading-anchor\" href=\"#customize-the-default-error-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O Django inclui várias “views” e “templates” padrão para vários erros HTTP. Talvez você queira sobrescrever os templates padrão criando os seguintes templates na raiz do seu diretório de template: <code class=\"docutils literal notranslate\"><span class=\"pre\">404.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">500.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">403.html</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">400.html</span></code>. As “views” padrão devem bastar para 99% das aplicações Web, mas se desejar customizá-las, veja essas instruções as quais também contém detalhes sobre os templates padrão.</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/views/#http-not-found-view\"><span class=\"std std-ref\">A view 404 (página não encontrada)</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/views/#http-internal-server-error-view\"><span class=\"std std-ref\">A view 500 (erro no servidor)</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/views/#http-forbidden-view\"><span class=\"std std-ref\">The 403 (HTTP Forbidden) view</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/views/#http-bad-request-view\"><span class=\"std std-ref\">A view 400 (pedido ruim)</span></a></p></li>\n</ul>\n</section>\n</section>\n<section id=\"python-options\">\n<h2>Opções Python<a class=\"heading-anchor\" href=\"#python-options\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>É fortemente recomendável que os processos Python que executam a aplicação Django use a opção -R ou com a variável de ambiente <span class=\"target\" id=\"index-2\"></span><a class=\"reference external\" href=\"https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED\" title=\"(em Python v3.14)\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">PYTHONHASHSEED</span></code></a> definida como <code class=\"docutils literal notranslate\"><span class=\"pre\">random</span></code>. Essa opção está por padrão habilitada a começar com o Python 3.3.</p>\n<p>Essas opções ajudam a proteger seu site de ataques de “negação de serviço” (DoS) disparados por entradas cuidadosamente elaboradas. Como um ataque que pode aumentar drasticamente o uso da CPU causando um cenário de pior desempenho quando cria instâncias de <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code>. Veja  <a class=\"reference external\" href=\"http://www.ocert.org/advisories/ocert-2011-003.html\">oCERT advisory #2011-003</a> para mais informações.</p>\n</section>","rootId":"deployment-checklist","toc":[{"title":"Execute manage.py check --deploy","anchor":"run-manage-py-check-deploy","children":[]},{"title":"Configurações críticas.","anchor":"critical-settings","children":[{"title":"SECRET_KEY","anchor":"secret-key","children":[]},{"title":"DEBUG","anchor":"debug","children":[]}]},{"title":"Configurações específicas de configurações","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 e configurações relacionadas","anchor":"email-backend-and-related-settings","children":[]},{"title":"STATIC_ROOT e 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":"Otimizações de desempenho.","anchor":"performance-optimizations","children":[{"title":"CONN_MAX_AGE","anchor":"conn-max-age","children":[]},{"title":"TEMPLATES","anchor":"templates","children":[]}]},{"title":"Relatório de erro","anchor":"error-reporting","children":[{"title":"LOGGING","anchor":"logging","children":[]},{"title":"ADMINS e MANAGERS","anchor":"admins-and-managers","children":[]},{"title":"Customize as views de erro padrão","anchor":"customize-the-default-error-views","children":[]}]},{"title":"Opções Python","anchor":"python-options","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Guias de “como fazer”","url":"/pt-br/1.9/howto/"},{"docname":"howto/deployment/index","title":"Implantação Django","url":"/pt-br/1.9/howto/deployment/"}],"prev":{"docname":"howto/deployment/wsgi/uwsgi","title":"Como usar Django com uWSGI","url":"/pt-br/1.9/howto/deployment/wsgi/uwsgi/"},"next":{"docname":"howto/upgrade-version","title":"Atualizando o Django para uma nova versão","url":"/pt-br/1.9/howto/upgrade-version/"},"formats":{"html":"/pt-br/1.9/howto/deployment/checklist/","markdown":"/pt-br/1.9/howto/deployment/checklist.md","json":"/pt-br/1.9/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/pt-br/1.9/howto/deployment/checklist/","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","fr","ja","id","pt-br","es"]}