{"title":"The messages framework","version":"1.11","locale":"pt-br","docname":"ref/contrib/messages","url":"/pt-br/1.11/ref/contrib/messages/","canonical":"https://djangodocs.dev/pt-br/1.11/ref/contrib/messages/","summary":"Quite commonly in web applications, you need to display a one-time notification message (also known as “flash message”) to the user after processing a form or some…","html":"<span id=\"the-messages-framework\"></span><h1>The messages framework<a class=\"heading-anchor\" href=\"#module-django.contrib.messages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Quite commonly in web applications, you need to display a one-time\nnotification message (also known as “flash message”) to the user after\nprocessing a form or some other types of user input.</p>\n<p>For this, Django provides full support for cookie- and session-based\nmessaging, for both anonymous and authenticated users. The messages framework\nallows you to temporarily store messages in one request and retrieve them for\ndisplay in a subsequent request (usually the next one). Every message is\ntagged with a specific <code class=\"docutils literal notranslate\">level</code> that determines its priority (e.g., <code class=\"docutils literal notranslate\">info</code>,\n<code class=\"docutils literal notranslate\">warning</code>, or <code class=\"docutils literal notranslate\">error</code>).</p>\n<section id=\"enabling-messages\">\n<h2>Enabling messages<a class=\"heading-anchor\" href=\"#enabling-messages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Messages are implemented through a <a class=\"reference internal\" href=\"/pt-br/1.11/ref/middleware/\"><span class=\"doc\">middleware</span></a>\nclass and corresponding <a class=\"reference internal\" href=\"/pt-br/1.11/ref/templates/api/\"><span class=\"doc\">context processor</span></a>.</p>\n<p>The default <code class=\"docutils literal notranslate\">settings.py</code> created by <code class=\"docutils literal notranslate\">django-admin startproject</code>\nalready contains all the settings required to enable message functionality:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">'django.contrib.messages'</code> is in <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> contains\n<code class=\"docutils literal notranslate\">'django.contrib.sessions.middleware.SessionMiddleware'</code> and\n<code class=\"docutils literal notranslate\">'django.contrib.messages.middleware.MessageMiddleware'</code>.</p>\n<p>The default <a class=\"reference internal\" href=\"#message-storage-backends\"><span class=\"std std-ref\">storage backend</span></a> relies on\n<a class=\"reference internal\" href=\"/pt-br/1.11/topics/http/sessions/\"><span class=\"doc\">sessions</span></a>. That’s why <code class=\"docutils literal notranslate\">SessionMiddleware</code>\nmust be enabled and appear before <code class=\"docutils literal notranslate\">MessageMiddleware</code> in\n<a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a>.</p>\n</li>\n<li><p>The <code class=\"docutils literal notranslate\">'context_processors'</code> option of the <code class=\"docutils literal notranslate\">DjangoTemplates</code> backend\ndefined in your <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> setting contains\n<code class=\"docutils literal notranslate\">'django.contrib.messages.context_processors.messages'</code>.</p></li>\n</ul>\n<p>If you don’t want to use messages, you can remove\n<code class=\"docutils literal notranslate\">'django.contrib.messages'</code> from your <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, the\n<code class=\"docutils literal notranslate\">MessageMiddleware</code> line from <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a>, and the <code class=\"docutils literal notranslate\">messages</code>\ncontext processor from <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a>.</p>\n</section>\n<section id=\"configuring-the-message-engine\">\n<h2>Configuring the message engine<a class=\"heading-anchor\" href=\"#configuring-the-message-engine\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"storage-backends\">\n<span id=\"message-storage-backends\"></span><h3>Storage backends<a class=\"heading-anchor\" href=\"#storage-backends\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The messages framework can use different backends to store temporary messages.</p>\n<p>Django provides three built-in storage classes in\n<a class=\"reference internal\" href=\"#module-django.contrib.messages\" title=\"django.contrib.messages: Provides cookie- and session-based temporary message storage.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.messages</code></a>:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.session.SessionStorage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">storage.session.</span><span class=\"sig-name descname\">SessionStorage</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.session.SessionStorage\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This class stores all messages inside of the request’s session. Therefore\nit requires Django’s <code class=\"docutils literal notranslate\">contrib.sessions</code> application.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.cookie.CookieStorage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">storage.cookie.</span><span class=\"sig-name descname\">CookieStorage</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.cookie.CookieStorage\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This class stores the message data in a cookie (signed with a secret hash\nto prevent manipulation) to persist notifications across requests. Old\nmessages are dropped if the cookie data size would exceed 2048 bytes.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.fallback.FallbackStorage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">storage.fallback.</span><span class=\"sig-name descname\">FallbackStorage</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.fallback.FallbackStorage\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This class first uses <code class=\"docutils literal notranslate\">CookieStorage</code>, and falls back to using\n<code class=\"docutils literal notranslate\">SessionStorage</code> for the messages that could not fit in a single cookie.\nIt also requires Django’s <code class=\"docutils literal notranslate\">contrib.sessions</code> application.</p>\n<p>This behavior avoids writing to the session whenever possible. It should\nprovide the best performance in the general case.</p>\n</dd></dl>\n\n<p><a class=\"reference internal\" href=\"#django.contrib.messages.storage.fallback.FallbackStorage\" title=\"django.contrib.messages.storage.fallback.FallbackStorage\"><code class=\"xref py py-class docutils literal notranslate\">FallbackStorage</code></a> is the\ndefault storage class. If it isn’t suitable to your needs, you can select\nanother storage class by setting <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_STORAGE</code></a> to its full import\npath, for example:</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>MESSAGE_STORAGE <span class=\"o\">=</span> <span class=\"s1\">&#39;django.contrib.messages.storage.cookie.CookieStorage&#39;</span>\n</code></pre></div>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.base.BaseStorage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">storage.base.</span><span class=\"sig-name descname\">BaseStorage</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.base.BaseStorage\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>To write your own storage class, subclass the <code class=\"docutils literal notranslate\">BaseStorage</code> class in\n<code class=\"docutils literal notranslate\">django.contrib.messages.storage.base</code> and implement the <code class=\"docutils literal notranslate\">_get</code> and\n<code class=\"docutils literal notranslate\">_store</code> methods.</p>\n</section>\n<section id=\"message-levels\">\n<span id=\"message-level\"></span><h3>Message levels<a class=\"heading-anchor\" href=\"#message-levels\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The messages framework is based on a configurable level architecture similar\nto that of the Python logging module. Message levels allow you to group\nmessages by type so they can be filtered or displayed differently in views and\ntemplates.</p>\n<p>The built-in levels, which can be imported from <code class=\"docutils literal notranslate\">django.contrib.messages</code>\ndirectly, are:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Constant</p></th>\n<th class=\"head\"><p>Purpose</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">DEBUG</code></p></td>\n<td><p>Development-related messages that will be ignored (or removed) in a production deployment</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</code></p></td>\n<td><p>Informational messages for the user</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">SUCCESS</code></p></td>\n<td><p>An action was successful, e.g. “Your profile was updated successfully”</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">WARNING</code></p></td>\n<td><p>A failure did not occur but may be imminent</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">ERROR</code></p></td>\n<td><p>An action was <strong>not</strong> successful or some other failure occurred</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>The <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_LEVEL</code></a> setting can be used to change the minimum recorded level\n(or it can be <a class=\"reference internal\" href=\"#changing-the-minimum-recorded-level-per-request\">changed per request</a>). Attempts to add messages of a level less\nthan this will be ignored.</p>\n</section>\n<section id=\"message-tags\">\n<h3>Message tags<a class=\"heading-anchor\" href=\"#message-tags\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Message tags are a string representation of the message level plus any\nextra tags that were added directly in the view (see\n<a class=\"reference internal\" href=\"#adding-extra-message-tags\">Adding extra message tags</a> below for more details). Tags are stored in a\nstring and are separated by spaces. Typically, message tags\nare used as CSS classes to customize message style based on message type. By\ndefault, each level has a single tag that’s a lowercase version of its own\nconstant:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Level Constant</p></th>\n<th class=\"head\"><p>Tag</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">DEBUG</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">debug</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">info</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">SUCCESS</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">success</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">WARNING</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">warning</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">ERROR</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">error</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>To change the default tags for a message level (either built-in or custom),\nset the <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a> setting to a dictionary containing the levels\nyou wish to change. As this extends the default tags, you only need to provide\ntags for the levels you wish to override:</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.contrib.messages</span> <span class=\"kn\">import</span> constants <span class=\"k\">as</span> messages\nMESSAGE_TAGS <span class=\"o\">=</span> <span class=\"p\">{</span>\n    messages<span class=\"o\">.</span>INFO<span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n    <span class=\"mi\">50</span><span class=\"p\">:</span> <span class=\"s1\">&#39;critical&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"using-messages-in-views-and-templates\">\n<h2>Using messages in views and templates<a class=\"heading-anchor\" href=\"#using-messages-in-views-and-templates\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.add_message\">\n<span class=\"sig-name descname\">add_message</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">level</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">extra_tags<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.add_message\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"adding-a-message\">\n<h3>Adding a message<a class=\"heading-anchor\" href=\"#adding-a-message\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To add a message, call:</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.contrib</span> <span class=\"kn\">import</span> messages\nmessages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>INFO<span class=\"p\">,</span> <span class=\"s1\">&#39;Hello world.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Some shortcut methods provide a standard way to add messages with commonly\nused tags (which are usually represented as HTML classes for the message):</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>messages<span class=\"o\">.</span>debug<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> SQL statements were executed.&#39;</span> <span class=\"o\">%</span> count<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>info<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Three credits remain in your account.&#39;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>success<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Profile details updated.&#39;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>warning<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Your account expires in three days.&#39;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>error<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Document deleted.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"displaying-messages\">\n<span id=\"message-displaying\"></span><h3>Displaying messages<a class=\"heading-anchor\" href=\"#displaying-messages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.get_messages\">\n<span class=\"sig-name descname\">get_messages</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.get_messages\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><strong>In your template</strong>, use something like:</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=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> messages <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;</span>ul class<span class=\"o\">=</span><span class=\"s2\">&quot;messages&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> message <span class=\"ow\">in</span> messages <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span>li<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> message<span class=\"o\">.</span>tags <span class=\"o\">%</span><span class=\"p\">}</span> class<span class=\"o\">=</span><span class=\"s2\">&quot;{{ message.tags }}&quot;</span><span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span><span class=\"o\">&gt;</span><span class=\"p\">{{</span> message <span class=\"p\">}}</span><span class=\"o\">&lt;/</span>li<span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> endfor <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;/</span>ul<span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>If you’re using the context processor, your template should be rendered with a\n<code class=\"docutils literal notranslate\">RequestContext</code>. Otherwise, ensure <code class=\"docutils literal notranslate\">messages</code> is available to\nthe template context.</p>\n<p>Even if you know there is only just one message, you should still iterate over\nthe <code class=\"docutils literal notranslate\">messages</code> sequence, because otherwise the message storage will not be cleared\nfor the next request.</p>\n<p>The context processor also provides a <code class=\"docutils literal notranslate\">DEFAULT_MESSAGE_LEVELS</code> variable which\nis a mapping of the message level names to their numeric value:</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=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> messages <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;</span>ul class<span class=\"o\">=</span><span class=\"s2\">&quot;messages&quot;</span><span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">for</span> message <span class=\"ow\">in</span> messages <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"o\">&lt;</span>li<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> message<span class=\"o\">.</span>tags <span class=\"o\">%</span><span class=\"p\">}</span> class<span class=\"o\">=</span><span class=\"s2\">&quot;{{ message.tags }}&quot;</span><span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span><span class=\"o\">&gt;</span>\n        <span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"k\">if</span> message<span class=\"o\">.</span>level <span class=\"o\">==</span> DEFAULT_MESSAGE_LEVELS<span class=\"o\">.</span>ERROR <span class=\"o\">%</span><span class=\"p\">}</span>Important<span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span>\n        <span class=\"p\">{{</span> message <span class=\"p\">}}</span>\n    <span class=\"o\">&lt;/</span>li<span class=\"o\">&gt;</span>\n    <span class=\"p\">{</span><span class=\"o\">%</span> endfor <span class=\"o\">%</span><span class=\"p\">}</span>\n<span class=\"o\">&lt;/</span>ul<span class=\"o\">&gt;</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> endif <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p><strong>Outside of templates</strong>, you can use\n<a class=\"reference internal\" href=\"#django.contrib.messages.get_messages\" title=\"django.contrib.messages.get_messages\"><code class=\"xref py py-func docutils literal notranslate\">get_messages()</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.messages</span> <span class=\"kn\">import</span> get_messages\n\nstorage <span class=\"o\">=</span> get_messages<span class=\"p\">(</span>request<span class=\"p\">)</span>\n<span class=\"k\">for</span> message <span class=\"ow\">in</span> storage<span class=\"p\">:</span>\n    do_something_with_the_message<span class=\"p\">(</span>message<span class=\"p\">)</span>\n</code></pre></div>\n<p>For instance, you can fetch all the messages to return them in a\n<a class=\"reference internal\" href=\"/pt-br/1.11/topics/class-based-views/mixins/#jsonresponsemixin-example\"><span class=\"std std-ref\">JSONResponseMixin</span></a> instead of a\n<a class=\"reference internal\" href=\"/pt-br/1.11/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin\" title=\"django.views.generic.base.TemplateResponseMixin\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponseMixin</code></a>.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.messages.get_messages\" title=\"django.contrib.messages.get_messages\"><code class=\"xref py py-func docutils literal notranslate\">get_messages()</code></a> will return an\ninstance of the configured storage backend.</p>\n</section>\n<section id=\"the-message-class\">\n<h3>The <code class=\"docutils literal notranslate\">Message</code> class<a class=\"heading-anchor\" href=\"#the-message-class\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.storage.base.Message\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">storage.base.</span><span class=\"sig-name descname\">Message</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.storage.base.Message\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When you loop over the list of messages in a template, what you get are\ninstances of the <code class=\"docutils literal notranslate\">Message</code> class. It’s quite a simple object, with only a\nfew attributes:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">message</code>: The actual text of the message.</p></li>\n<li><p><code class=\"docutils literal notranslate\">level</code>: An integer describing the type of the message (see the\n<a class=\"reference internal\" href=\"#message-levels\">message levels</a> section above).</p></li>\n<li><p><code class=\"docutils literal notranslate\">tags</code>: A string combining all the message’s tags (<code class=\"docutils literal notranslate\">extra_tags</code> and\n<code class=\"docutils literal notranslate\">level_tag</code>) separated by spaces.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_tags</code>: A string containing custom tags for this message,\nseparated by spaces. It’s empty by default.</p></li>\n<li><p><code class=\"docutils literal notranslate\">level_tag</code>: The string representation of the level. By default, it’s\nthe lowercase version of the name of the associated constant, but this\ncan be changed if you need by using the <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a> setting.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"creating-custom-message-levels\">\n<h3>Creating custom message levels<a class=\"heading-anchor\" href=\"#creating-custom-message-levels\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Messages levels are nothing more than integers, so you can define your own\nlevel constants and use them to create more customized user feedback, e.g.:</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>CRITICAL <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> CRITICAL<span class=\"p\">,</span> <span class=\"s1\">&#39;A serious error occurred.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>When creating custom message levels you should be careful to avoid overloading\nexisting levels. The values for the built-in levels are:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\" id=\"message-level-constants\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Level Constant</p></th>\n<th class=\"head\"><p>Value</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">DEBUG</code></p></td>\n<td><p>10</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">INFO</code></p></td>\n<td><p>20</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">SUCCESS</code></p></td>\n<td><p>25</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">WARNING</code></p></td>\n<td><p>30</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">ERROR</code></p></td>\n<td><p>40</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>If you need to identify the custom levels in your HTML or CSS, you need to\nprovide a mapping via the <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a> setting.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>If you are creating a reusable application, it is recommended to use\nonly the built-in <a class=\"reference internal\" href=\"#message-levels\">message levels</a> and not rely on any custom levels.</p>\n</aside>\n</section>\n<section id=\"changing-the-minimum-recorded-level-per-request\">\n<h3>Changing the minimum recorded level per-request<a class=\"heading-anchor\" href=\"#changing-the-minimum-recorded-level-per-request\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The minimum recorded level can be set per request via the <code class=\"docutils literal notranslate\">set_level</code>\nmethod:</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.contrib</span> <span class=\"kn\">import</span> messages\n\n<span class=\"c1\"># Change the messages level to ensure the debug message is added.</span>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>DEBUG<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>debug<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Test message...&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># In another request, record only messages with a level of WARNING and higher</span>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>WARNING<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>success<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Your profile was updated.&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># ignored</span>\nmessages<span class=\"o\">.</span>warning<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Your account is about to expire.&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># recorded</span>\n\n<span class=\"c1\"># Set the messages level back to default.</span>\nmessages<span class=\"o\">.</span>set_level<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Similarly, the current effective level can be retrieved with <code class=\"docutils literal notranslate\">get_level</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.contrib</span> <span class=\"kn\">import</span> messages\ncurrent_level <span class=\"o\">=</span> messages<span class=\"o\">.</span>get_level<span class=\"p\">(</span>request<span class=\"p\">)</span>\n</code></pre></div>\n<p>For more information on how the minimum recorded level functions, see\n<a class=\"reference internal\" href=\"#message-levels\">Message levels</a> above.</p>\n</section>\n<section id=\"adding-extra-message-tags\">\n<h3>Adding extra message tags<a class=\"heading-anchor\" href=\"#adding-extra-message-tags\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>For more direct control over message tags, you can optionally provide a string\ncontaining extra tags to any of the add methods:</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>messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>request<span class=\"p\">,</span> messages<span class=\"o\">.</span>INFO<span class=\"p\">,</span> <span class=\"s1\">&#39;Over 9000!&#39;</span><span class=\"p\">,</span> extra_tags<span class=\"o\">=</span><span class=\"s1\">&#39;dragonball&#39;</span><span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>error<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Email box full&#39;</span><span class=\"p\">,</span> extra_tags<span class=\"o\">=</span><span class=\"s1\">&#39;email&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Extra tags are added before the default tag for that level and are space\nseparated.</p>\n</section>\n<section id=\"failing-silently-when-the-message-framework-is-disabled\">\n<h3>Failing silently when the message framework is disabled<a class=\"heading-anchor\" href=\"#failing-silently-when-the-message-framework-is-disabled\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you’re writing a reusable app (or other piece of code) and want to include\nmessaging functionality, but don’t want to require your users to enable it\nif they don’t want to, you may pass an additional keyword argument\n<code class=\"docutils literal notranslate\">fail_silently=True</code> to any of the <code class=\"docutils literal notranslate\">add_message</code> family of methods. For\nexample:</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>messages<span class=\"o\">.</span>add_message<span class=\"p\">(</span>\n    request<span class=\"p\">,</span> messages<span class=\"o\">.</span>SUCCESS<span class=\"p\">,</span> <span class=\"s1\">&#39;Profile details updated.&#39;</span><span class=\"p\">,</span>\n    fail_silently<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\nmessages<span class=\"o\">.</span>info<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s1\">&#39;Hello world.&#39;</span><span class=\"p\">,</span> fail_silently<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Setting <code class=\"docutils literal notranslate\">fail_silently=True</code> only hides the <code class=\"docutils literal notranslate\">MessageFailure</code> that would\notherwise occur when the messages framework disabled and one attempts to\nuse one of the <code class=\"docutils literal notranslate\">add_message</code> family of methods. It does not hide failures\nthat may occur for other reasons.</p>\n</aside>\n</section>\n<section id=\"adding-messages-in-class-based-views\">\n<h3>Adding messages in class-based views<a class=\"heading-anchor\" href=\"#adding-messages-in-class-based-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.views.SuccessMessageMixin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">views.</span><span class=\"sig-name descname\">SuccessMessageMixin</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.views.SuccessMessageMixin\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Adds a success message attribute to\n<a class=\"reference internal\" href=\"/pt-br/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView\" title=\"django.views.generic.edit.FormView\"><code class=\"xref py py-class docutils literal notranslate\">FormView</code></a> based classes</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.views.SuccessMessageMixin.get_success_message\">\n<span class=\"sig-name descname\">get_success_message</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">cleaned_data</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.messages.views.SuccessMessageMixin.get_success_message\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">cleaned_data</code> is the cleaned data from the form which is used for\nstring formatting</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><strong>Examplo views.py</strong>:</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.contrib.messages.views</span> <span class=\"kn\">import</span> SuccessMessageMixin\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"kn\">import</span> CreateView\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Author\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorCreate</span><span class=\"p\">(</span>SuccessMessageMixin<span class=\"p\">,</span> CreateView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Author\n    success_url <span class=\"o\">=</span> <span class=\"s1\">&#39;/success/&#39;</span>\n    success_message <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(name)s</span><span class=\"s2\"> was created successfully&quot;</span>\n</code></pre></div>\n<p>The cleaned data from the <code class=\"docutils literal notranslate\">form</code> is available for string interpolation using\nthe <code class=\"docutils literal notranslate\">%(field_name)s</code> syntax. For ModelForms, if you need access to fields\nfrom the saved <code class=\"docutils literal notranslate\">object</code> override the\n<a class=\"reference internal\" href=\"#django.contrib.messages.views.SuccessMessageMixin.get_success_message\" title=\"django.contrib.messages.views.SuccessMessageMixin.get_success_message\"><code class=\"xref py py-meth docutils literal notranslate\">get_success_message()</code></a>\nmethod.</p>\n<p><strong>Example views.py for ModelForms</strong>:</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.contrib.messages.views</span> <span class=\"kn\">import</span> SuccessMessageMixin\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"kn\">import</span> CreateView\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> ComplicatedModel\n\n<span class=\"k\">class</span> <span class=\"nc\">ComplicatedCreate</span><span class=\"p\">(</span>SuccessMessageMixin<span class=\"p\">,</span> CreateView<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> ComplicatedModel\n    success_url <span class=\"o\">=</span> <span class=\"s1\">&#39;/success/&#39;</span>\n    success_message <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(calculated_field)s</span><span class=\"s2\"> was created successfully&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_success_message</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> cleaned_data<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>success_message <span class=\"o\">%</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n            cleaned_data<span class=\"p\">,</span>\n            calculated_field<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>object<span class=\"o\">.</span>calculated_field<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"expiration-of-messages\">\n<h2>Expiration of messages<a class=\"heading-anchor\" href=\"#expiration-of-messages\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The messages are marked to be cleared when the storage instance is iterated\n(and cleared when the response is processed).</p>\n<p>To avoid the messages being cleared, you can set the messages storage to\n<code class=\"docutils literal notranslate\">False</code> after iterating:</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>storage <span class=\"o\">=</span> messages<span class=\"o\">.</span>get_messages<span class=\"p\">(</span>request<span class=\"p\">)</span>\n<span class=\"k\">for</span> message <span class=\"ow\">in</span> storage<span class=\"p\">:</span>\n    do_something_with<span class=\"p\">(</span>message<span class=\"p\">)</span>\nstorage<span class=\"o\">.</span>used <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n</section>\n<section id=\"behavior-of-parallel-requests\">\n<h2>Behavior of parallel requests<a class=\"heading-anchor\" href=\"#behavior-of-parallel-requests\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Due to the way cookies (and hence sessions) work, <strong>the behavior of any\nbackends that make use of cookies or sessions is undefined when the same\nclient makes multiple requests that set or get messages in parallel</strong>. For\nexample, if a client initiates a request that creates a message in one window\n(or tab) and then another that fetches any uniterated messages in another\nwindow, before the first window redirects, the message may appear in the\nsecond window instead of the first window where it may be expected.</p>\n<p>In short, when multiple simultaneous requests from the same client are\ninvolved, messages are not guaranteed to be delivered to the same window that\ncreated them nor, in some cases, at all. Note that this is typically not a\nproblem in most applications and will become a non-issue in HTML5, where each\nwindow/tab will have its own browsing context.</p>\n</section>\n<section id=\"settings\">\n<h2>Configurações<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A few <a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#settings-messages\"><span class=\"std std-ref\">settings</span></a> give you control over message\nbehavior:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_LEVEL\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_LEVEL</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_STORAGE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-MESSAGE_TAGS\"><code class=\"xref std std-setting docutils literal notranslate\">MESSAGE_TAGS</code></a></p></li>\n</ul>\n<p>For backends that use cookies, the settings for the cookie are taken from\nthe session cookie settings:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-SESSION_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_DOMAIN</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_SECURE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.11/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_HTTPONLY</code></a></p></li>\n</ul>\n</section>","rootId":"module-django.contrib.messages","toc":[{"title":"Enabling messages","anchor":"enabling-messages","children":[]},{"title":"Configuring the message engine","anchor":"configuring-the-message-engine","children":[{"title":"Storage backends","anchor":"storage-backends","children":[]},{"title":"Message levels","anchor":"message-levels","children":[]},{"title":"Message tags","anchor":"message-tags","children":[]}]},{"title":"Using messages in views and templates","anchor":"using-messages-in-views-and-templates","children":[{"title":"Adding a message","anchor":"adding-a-message","children":[]},{"title":"Displaying messages","anchor":"displaying-messages","children":[]},{"title":"The Message class","anchor":"the-message-class","children":[]},{"title":"Creating custom message levels","anchor":"creating-custom-message-levels","children":[]},{"title":"Changing the minimum recorded level per-request","anchor":"changing-the-minimum-recorded-level-per-request","children":[]},{"title":"Adding extra message tags","anchor":"adding-extra-message-tags","children":[]},{"title":"Failing silently when the message framework is disabled","anchor":"failing-silently-when-the-message-framework-is-disabled","children":[]},{"title":"Adding messages in class-based views","anchor":"adding-messages-in-class-based-views","children":[]}]},{"title":"Expiration of messages","anchor":"expiration-of-messages","children":[]},{"title":"Behavior of parallel requests","anchor":"behavior-of-parallel-requests","children":[]},{"title":"Configurações","anchor":"settings","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Referência da API","url":"/pt-br/1.11/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/pt-br/1.11/ref/contrib/"}],"prev":{"docname":"ref/contrib/humanize","title":"django.contrib.humanize","url":"/pt-br/1.11/ref/contrib/humanize/"},"next":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/pt-br/1.11/ref/contrib/postgres/"},"formats":{"html":"/pt-br/1.11/ref/contrib/messages/","markdown":"/pt-br/1.11/ref/contrib/messages.md","json":"/pt-br/1.11/ref/contrib/messages.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/ref/contrib/messages.txt","official":"https://docs.djangoproject.com/pt-br/1.11/ref/contrib/messages/","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","ko","es","el","pl"]}