{"title":"Relatório de erro","version":"1.9","locale":"pt-br","docname":"howto/error-reporting","url":"/pt-br/1.9/howto/error-reporting/","canonical":"https://djangodocs.dev/pt-br/1.9/howto/error-reporting/","summary":"Quando estiver rondando um site público você deve sempre desligar a definição DEBUG.","html":"<h1>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></h1>\n<p>Quando estiver rondando um site público você deve sempre desligar a definição <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> . Isso fará que seu servidor rode bem mais rápido, e também irá evitar que usuários maliciosos vejam detalhes da sua aplicação que podem ser revelados por erros em suas páginas.</p>\n<p>Contudo, rodar com <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> definido como <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>False``quer dizer que você nunca verá os erros gerados pelo seu site – todos verão somente sua página pública de erro. É necessário rastrear os erros que ocorrem em sites publicados, então o Django pode ser configurado para criar relatorios com detahes sobre este erros.</p>\n<section id=\"email-reports\">\n<h2>Relatórios por email.<a class=\"heading-anchor\" href=\"#email-reports\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"server-errors\">\n<h3>Erros do servidors<a class=\"heading-anchor\" href=\"#server-errors\"><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\">DEBUG</code></a> é definido <code class=\"docutils literal notranslate\">False</code>, Django irá enviar emails para os usuários listados na configuração <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\">ADMINS</code></a> sempre que seu código gerar uma exceção não tratada e resulta em um erro interno do servidor  (código de status HTTP 500). Isso dá aos administradores uma notificação imediata de qualquer erro. O  <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\">ADMINS</code></a> receberá uma descrição do erro, uma histórico Python completo, e detalhes sobre a requisição HTTP que causou o erro.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Para enviar o email, o Django requer algumas configurações dizendo a ele como se conectar ao seu servidor de email. No mínimo é necessário especificar <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a> e possivelmente <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-EMAIL_HOST_USER\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_USER</code></a> e <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-EMAIL_HOST_PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_PASSWORD</code></a>, embora outras configurações tambem sejam requeridas dependendo da configuração do seu servidor de email. Consulte o <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/\"><span class=\"doc\">Documentação de configurações do Django</span></a> para uma lista completa de configurações relacionadas a email.</p>\n</aside>\n<p>Por padrão, o Django envia email do <a class=\"reference external\" href=\"mailto:root&#37;&#52;&#48;localhost\">root<span>&#64;</span>localhost</a>. Contudo, alguns provedores de email rejeitam todos os email deste endereço. Para usar um endereço de remetente diferente, modifique a configuração <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">SERVER_EMAIL</code></a></p>\n<p>Para ativar este comportamento, coloque o endereço de email dos destinatários na definição do <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\">ADMINS</code></a></p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Emails de erros de servidores são enviados usando o framework de log, e você pode customizár seu comportamento por <a class=\"reference internal\" href=\"/pt-br/1.9/topics/logging/\"><span class=\"doc\">customizando sua configuração de log</span></a>.</p>\n</aside>\n</section>\n<section id=\"errors\">\n<h3>Erros 404<a class=\"heading-anchor\" href=\"#errors\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O Django pode ser configurado para enviar emails com erros sobre links quebrados (erros 404 “página não encontrada”). O Django envia emails com erros 404 quando:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> é <code class=\"docutils literal notranslate\">False</code>;</p></li>\n<li><p>Sua definição de <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-MIDDLEWARE_CLASSES\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE_CLASSES</code></a> incluem <a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.middleware.common.BrokenLinkEmailsMiddleware\" title=\"django.middleware.common.BrokenLinkEmailsMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.middleware.common.BrokenLinkEmailsMiddleware</code></a>.</p></li>\n</ul>\n<p>Se estas condições são encontradas, o Django irá enviar emails aos usuários listados na definição de <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\">MANAGERS</code></a>  sempre que seu código gerar um 404 e o request possui um HTTP Referer. Ele não se preocupa em enviar email para 404 que não tenham um HTTP Referer – estes são geralmente pessoas digitando URLs quebradas ou robôs Web quebrados. Ele também ignora 404s quando o referente é igual a URL requisitada, já que este comportamento provém também de robôs Web quebrados.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.9\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>Em versões mais antigas, 404s não eram ignorados quando o HTTP Referer era igual a URL de request.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.middleware.common.BrokenLinkEmailsMiddleware\" title=\"django.middleware.common.BrokenLinkEmailsMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">BrokenLinkEmailsMiddleware</code></a> deve aparecer antes de outros “middlewares” que interceptam 404, tal como <a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">LocaleMiddleware</code></a> ou <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/flatpages/#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">FlatpageFallbackMiddleware</code></a>. Coloque-o na parte superior do seu <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-MIDDLEWARE_CLASSES\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE_CLASSES</code></a> setting.</p>\n</aside>\n<p>Você pode dizer ao Django para parar de reportar 404s ajustando a definição do <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\">IGNORABLE_404_URLS</code></a>. Isso deve ser uma lista de objetos compilados de expressões regulares. Por exeplo:</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=\"nn\">re</span>\nIGNORABLE_404_URLS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    re<span class=\"o\">.</span>compile<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;\\.(php|cgi)$&#39;</span><span class=\"p\">),</span>\n    re<span class=\"o\">.</span>compile<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^/phpmyadmin/&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Neste exemplo, um 404 para qualquer URL com <code class=\"docutils literal notranslate\">.php``ou ``.cgi</code> <em>não</em> será reportado. Nem nenhuma URL começando com <code class=\"docutils literal notranslate\">/phpadmin/</code>.</p>\n<p>O exemplo seguinte mostra como excluir algumas URLs convencionais que “borwsers” e “crawlers” requisitam com frequência.</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=\"nn\">re</span>\nIGNORABLE_404_URLS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    re<span class=\"o\">.</span>compile<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^/apple-touch-icon.*\\.png$&#39;</span><span class=\"p\">),</span>\n    re<span class=\"o\">.</span>compile<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^/favicon\\.ico$&#39;</span><span class=\"p\">),</span>\n    re<span class=\"o\">.</span>compile<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^/robots\\.txt$&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>(repare que essas são expressões regulares, então coloca-se uma barra invertida na frente dos pontos para que não sejam substituidos.)</p>\n<p>Se quer personalizar o comportamentdo do <a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.middleware.common.BrokenLinkEmailsMiddleware\" title=\"django.middleware.common.BrokenLinkEmailsMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.middleware.common.BrokenLinkEmailsMiddleware</code></a> mais adiante (por exemplo para ignorar requisições vindas de rastreadores web), você deve criar uma subclasse e sobrescreva seus métodos.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Erros 404 são logados usando o framework logging. Por padrão, estes registros de log são ignorados, mas você pode usá-los para relatório de erros sobrescrevendo o “handlers” e o <a class=\"reference internal\" href=\"/pt-br/1.9/topics/logging/\"><span class=\"doc\">configuring logging</span></a> apropriadamente.</p>\n</aside>\n</section>\n</section>\n<section id=\"filtering-error-reports\">\n<span id=\"id1\"></span><h2>Filtrando relatórios de erros<a class=\"heading-anchor\" href=\"#filtering-error-reports\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Aviso</p>\n<p>Filtrar dados sensíveis é um problema difícil, e é quase impossível garantir que dados sensíveis não vão vazar dentro de um relatório de erro. Portanto, relatórios de erros soment devem ser disponibilizados para membros confiáveis do time e você deveria evitar transmitir relatórios de erros sem incriptação através da internet (tal como através de um e-mail).</p>\n</aside>\n<section id=\"filtering-sensitive-information\">\n<h3>Filtrando Informações sensíveis<a class=\"heading-anchor\" href=\"#filtering-sensitive-information\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Relatórios de erros são de grande ajuda para detectar falhas, sempre é util registrar o máximo de informação sobre falhas quanto possível. Por exemplo, por padrão o Django registra</p>\n<p>However, sometimes certain types of information may be too sensitive and thus\nmay not be appropriate to be kept track of, for example a user’s password or\ncredit card number. So in addition to filtering out settings that appear to be\nsensitive as described in the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> documentation, Django offers a\nset of function decorators to help you control which information should be\nfiltered out of error reports in a production environment (that is, where\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> is set to <code class=\"docutils literal notranslate\">False</code>): <a class=\"reference internal\" href=\"#django.views.decorators.debug.sensitive_variables\" title=\"django.views.decorators.debug.sensitive_variables\"><code class=\"xref py py-func docutils literal notranslate\">sensitive_variables()</code></a> and\n<a class=\"reference internal\" href=\"#django.views.decorators.debug.sensitive_post_parameters\" title=\"django.views.decorators.debug.sensitive_post_parameters\"><code class=\"xref py py-func docutils literal notranslate\">sensitive_post_parameters()</code></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.debug.sensitive_variables\">\n<span class=\"sig-name descname\">sensitive_variables</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>variables</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.debug.sensitive_variables\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Se uma função (uma view ou callback) no seu código usa variavéis locais que venham guardar informação sigilosa, voce deve reguasdar o valor dessas variavéis de serem expostas nos relatórios de erros usando o decorator ‘’sensitive_variables’’</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\">from</span> <span class=\"nn\">django.views.decorators.debug</span> <span class=\"kn\">import</span> sensitive_variables\n\n<span class=\"nd\">@sensitive_variables</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pw&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cc&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">process_info</span><span class=\"p\">(</span>user<span class=\"p\">):</span>\n    pw <span class=\"o\">=</span> user<span class=\"o\">.</span>pass_word\n    cc <span class=\"o\">=</span> user<span class=\"o\">.</span>credit_card_number\n    name <span class=\"o\">=</span> user<span class=\"o\">.</span>name\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>No exemplo anterior, os valores de “user”, “pw” e “cc” serão ocultados e trocados por asteríscos (**********) nos relatórios de erros, onde quer que o valor da variavel  “name”  seja  exibido.</p>\n<p>Para esconder sistematicamente todas as variáveis locais de uma fução dos logs de erros, não forneça argumento ao decorador <code class=\"docutils literal notranslate\">sensitive_variables</code>:</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=\"nd\">@sensitive_variables</span><span class=\"p\">()</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_function</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"admonition-when-using-multiple-decorators admonition\" role=\"note\">\n<p class=\"admonition-title\">Quando usar multiplos decorators</p>\n<p>Se a variável que você quer esconder é também um argumento da função (ex.: <code class=\"docutils literal notranslate\">user</code> no exemplo a seguir), e si a função “decorada” tem múltimplos “decorators”,  então tenha certeza de posiionar o <code class=\"docutils literal notranslate\">&#64;sensitive_variables</code>  no topo da lista de “decorators”. Desta maneira, serão escondidos também  o argumento da função enquanto passa pelos outros “decorators”:</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=\"nd\">@sensitive_variables</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pw&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cc&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@some_decorator</span>\n<span class=\"nd\">@another_decorator</span>\n<span class=\"k\">def</span> <span class=\"nf\">process_info</span><span class=\"p\">(</span>user<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.debug.sensitive_post_parameters\">\n<span class=\"sig-name descname\">sensitive_post_parameters</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>parameters</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.debug.sensitive_post_parameters\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Se uma de suas “views” recebe um objeto <a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> com <a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.POST\" title=\"django.http.HttpRequest.POST\"><code class=\"xref py py-attr docutils literal notranslate\">parâmetros do POST</code></a> suscetível a conter informação sensível, é possível  evitar que os valores destes parâmetros sejam incluídos no relatório de erros usando o “decorator” <code class=\"docutils literal notranslate\">sensitive_post_parameters</code></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\">from</span> <span class=\"nn\">django.views.decorators.debug</span> <span class=\"kn\">import</span> sensitive_post_parameters\n\n<span class=\"nd\">@sensitive_post_parameters</span><span class=\"p\">(</span><span class=\"s1\">&#39;pass_word&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;credit_card_number&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">record_user_profile</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    UserProfile<span class=\"o\">.</span>create<span class=\"p\">(</span>\n        user<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">,</span>\n        password<span class=\"o\">=</span>request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s1\">&#39;pass_word&#39;</span><span class=\"p\">],</span>\n        credit_card<span class=\"o\">=</span>request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s1\">&#39;credit_card_number&#39;</span><span class=\"p\">],</span>\n        name<span class=\"o\">=</span>request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">],</span>\n    <span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>No exemplo acima, os valores dos para parâmetros <code class=\"docutils literal notranslate\">pass_word</code> e <code class=\"docutils literal notranslate\">credit_card_number</code> do POST serão escondidos e substituídos por asteríscos (**********) na representação da requisição dentro do relatório de erro, independente de onde o valor do parâmetro  <code class=\"docutils literal notranslate\">name</code> seja mostrado.</p>\n<p>Para esconder sistematicamente todos os parâmetros do POST de uma requisição em um relatório de erro relatório, não forneça nenhum arguento para o “decorator”  <code class=\"docutils literal notranslate\">sensitive_post_parameters</code>:</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=\"nd\">@sensitive_post_parameters</span><span class=\"p\">()</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Todos os parâmentros do POST são sistematicamente filtrados do relatório para certas “views”   <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/default/#module-django.contrib.auth.views\" title=\"django.contrib.auth.views\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth.views</code></a>  (<code class=\"docutils literal notranslate\">login</code>, <code class=\"docutils literal notranslate\">password_reset_confirm</code>, <code class=\"docutils literal notranslate\">password_change</code>, e <code class=\"docutils literal notranslate\">add_view</code> e <code class=\"docutils literal notranslate\">user_change_password</code> no <code class=\"docutils literal notranslate\">auth</code> admin) para prevenir o vazamento de informação sensível tal como as senhas de usuários.</p>\n</dd></dl>\n\n</section>\n<section id=\"custom-error-reports\">\n<span id=\"id2\"></span><h3>Relatórios de erros personalizados<a class=\"heading-anchor\" href=\"#custom-error-reports\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tudo que <a class=\"reference internal\" href=\"#django.views.decorators.debug.sensitive_variables\" title=\"django.views.decorators.debug.sensitive_variables\"><code class=\"xref py py-func docutils literal notranslate\">sensitive_variables()</code></a> e <a class=\"reference internal\" href=\"#django.views.decorators.debug.sensitive_post_parameters\" title=\"django.views.decorators.debug.sensitive_post_parameters\"><code class=\"xref py py-func docutils literal notranslate\">sensitive_post_parameters()</code></a> fazem é, respectivamente, anota a função decorada com os nomes  das variáveis sensíveis e anota o objeto <code class=\"docutils literal notranslate\">HttpRequest</code> com o nome dos parâmetros sensíveis do POST, tal que essa informação sensível pode mais tarde ser filtrada dos relatórios quando um erro ocorrer. O filtro é feito pelo filtro de relatório de erros padrão do Django : <a class=\"reference internal\" href=\"#django.views.debug.SafeExceptionReporterFilter\" title=\"django.views.debug.SafeExceptionReporterFilter\"><code class=\"xref py py-class docutils literal notranslate\">django.views.debug.SafeExceptionReporterFilter</code></a>. Este filtro usa a anotação de decoradores para substituir os valores correspondentes por asteríscos (**********) quando o relatório é produzido. Se quiser sobrescrever ou customizar o compartamento padrão para todo o site, é preciso definir sua própria classe de filtro e indicar ao Django para usá-la através da definição <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEFAULT_EXCEPTION_REPORTER_FILTER\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_EXCEPTION_REPORTER_FILTER</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>DEFAULT_EXCEPTION_REPORTER_FILTER <span class=\"o\">=</span> <span class=\"s1\">&#39;path.to.your.CustomExceptionReporterFilter&#39;</span>\n</code></pre></div>\n<p>Você pode controlar de uma maneira mais granular qual filtro usar dentro de qualquer “view” configurando o atributo <code class=\"docutils literal notranslate\">exception_reporter_filter</code> do <code class=\"docutils literal notranslate\">HttpRequest</code>:</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\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">():</span>\n        request<span class=\"o\">.</span>exception_reporter_filter <span class=\"o\">=</span> CustomExceptionReporterFilter<span class=\"p\">()</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>A classe personalizada precisa herdar de <a class=\"reference internal\" href=\"#django.views.debug.SafeExceptionReporterFilter\" title=\"django.views.debug.SafeExceptionReporterFilter\"><code class=\"xref py py-class docutils literal notranslate\">django.views.debug.SafeExceptionReporterFilter</code></a> e talvez sobrescrever os seguintes métodos:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.views.debug.SafeExceptionReporterFilter\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SafeExceptionReporterFilter</span><a class=\"heading-anchor\" href=\"#django.views.debug.SafeExceptionReporterFilter\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.views.debug.SafeExceptionReporterFilter.is_active\">\n<span class=\"sig-prename descclassname\">SafeExceptionReporterFilter.</span><span class=\"sig-name descname\">is_active</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.debug.SafeExceptionReporterFilter.is_active\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna <code class=\"docutils literal notranslate\">True</code> para ativar a filtragem operada nos outros métodos. Por padrão o filtro é ativo se  <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> é <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.views.debug.SafeExceptionReporterFilter.get_post_parameters\">\n<span class=\"sig-prename descclassname\">SafeExceptionReporterFilter.</span><span class=\"sig-name descname\">get_post_parameters</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.debug.SafeExceptionReporterFilter.get_post_parameters\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna o dicionário filtrado dos parâmetros do POST. Por padrão ele substitui os valores dos parâmetros sensíveis por asteríscos  (**********).</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.views.debug.SafeExceptionReporterFilter.get_traceback_frame_variables\">\n<span class=\"sig-prename descclassname\">SafeExceptionReporterFilter.</span><span class=\"sig-name descname\">get_traceback_frame_variables</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">tb_frame</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.debug.SafeExceptionReporterFilter.get_traceback_frame_variables\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna o dicionário filtrado de variáveis globais para um dado quadro do “traceback”. Por padrão  ele substitui os valores de variáveis sensíveis por asteríscos (**********).</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Você pode também configurar um relatório de erro personalizado escrevendo um pedaço personalizado <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/middleware/#exception-middleware\"><span class=\"std std-ref\">middleware de exceção</span></a>. Se escrever um tratamento de erros personalizado, é uma boa idéia emular o tratamento de erro do Django e somente reportar/logar erros se <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> é <code class=\"docutils literal notranslate\">False</code>.</p>\n</aside>\n</section>\n</section>","rootId":"error-reporting","toc":[{"title":"Relatórios por email.","anchor":"email-reports","children":[{"title":"Erros do servidors","anchor":"server-errors","children":[]},{"title":"Erros 404","anchor":"errors","children":[]}]},{"title":"Filtrando relatórios de erros","anchor":"filtering-error-reports","children":[{"title":"Filtrando Informações sensíveis","anchor":"filtering-sensitive-information","children":[]},{"title":"Relatórios de erros personalizados","anchor":"custom-error-reports","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Guias de “como fazer”","url":"/pt-br/1.9/howto/"}],"prev":{"docname":"howto/upgrade-version","title":"Atualizando o Django para uma nova versão","url":"/pt-br/1.9/howto/upgrade-version/"},"next":{"docname":"howto/initial-data","title":"Fornecendo dados iniciais para modelos.","url":"/pt-br/1.9/howto/initial-data/"},"formats":{"html":"/pt-br/1.9/howto/error-reporting/","markdown":"/pt-br/1.9/howto/error-reporting.md","json":"/pt-br/1.9/howto/error-reporting.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/howto/error-reporting.txt","official":"https://docs.djangoproject.com/pt-br/1.9/howto/error-reporting/","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"]}