{"title":"Usando o sistema de autenticação Django","version":"1.9","locale":"pt-br","docname":"topics/auth/default","url":"/pt-br/1.9/topics/auth/default/","canonical":"https://djangodocs.dev/pt-br/1.9/topics/auth/default/","summary":"Este documento explica a utilização do sistema de autenticações do Django em suas configurações padrões. Estas configurações evoluíram para atender as necessidades…","html":"<h1>Usando o sistema de autenticação Django<a class=\"heading-anchor\" href=\"#using-the-django-authentication-system\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Este documento explica a utilização do sistema de autenticações do Django em suas configurações padrões. Estas configurações evoluíram para atender as necessidades mais comuns de um projeto, lidando com uma considerável quantidade de tarefas e implementando cuidadosamente, o uso de senhas e permissões. Para projetos onde o sistema de autenticações demande outras necessidades diferentes das padrões, o Django oferece suporte para uma extensiva customização:  <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/\"><span class=\"doc\">extension and customization</span></a> de autenticação.</p>\n<p>A autenticação do Django oferece, tanto autenticação como autorização juntos. Estes serviços são referenciados como “sistema de autenticação” uma vez estas funções são, de alguma forma, interligadas.</p>\n<section id=\"user-objects\">\n<span id=\"id1\"></span><h2>Objetos “User”<a class=\"heading-anchor\" href=\"#user-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os objetos do tipo <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> são o núcleo do sistema de autenticação. Eles tipicamente representam as pessoas interagindo com seu site e são usados para habilitar coisas como restrinção de acesso, registro de perfis de usuários, associar conteúdo com criadores etc. Somente uma classe de usuário existe no “framework” de autenticação do Django, isto é, usuários <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.is_superuser\" title=\"django.contrib.auth.models.User.is_superuser\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">'superusers'</span></code></a> ou admin <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.is_staff\" title=\"django.contrib.auth.models.User.is_staff\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">'staff'</span></code></a> são somente objetos do tipo “user” com atributos especiais definidos e não classes diferentes de objetos “user”.</p>\n<p>Os atributos primários de usuário padrão são:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.username\" title=\"django.contrib.auth.models.User.username\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">username</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.password\" title=\"django.contrib.auth.models.User.password\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">password</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.email\" title=\"django.contrib.auth.models.User.email\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">email</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.first_name\" title=\"django.contrib.auth.models.User.first_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">first_name</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.last_name\" title=\"django.contrib.auth.models.User.last_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">last_name</span></code></a></p></li>\n</ul>\n<p>Veja a :class:` documentação completa da API &lt;django.contrib.auth.models.User&gt;` para maiores detalhes, a documentação em questão é mais orientada a tarefa.</p>\n<section id=\"creating-users\">\n<span id=\"topics-auth-creating-users\"></span><h3>Criando usuários<a class=\"heading-anchor\" href=\"#creating-users\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A forma mais direta para se criar usuários, é utilizando a função de ajuda inclusa <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user\" title=\"django.contrib.auth.models.UserManager.create_user\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create_user()</span></code></a> helper function:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create_user</span><span class=\"p\">(</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;lennon@thebeatles.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;johnpassword&#39;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># At this point, user is a User object that has already been saved</span>\n<span class=\"go\"># to the database. You can continue to change its attributes</span>\n<span class=\"go\"># if you want to change other fields.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Lennon&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Se você tiver a administração do Django instalado, você também pode: ref: ` criar usuários de forma interativa &lt; auth -admin &gt;` .</p>\n</section>\n<section id=\"creating-superusers\">\n<span id=\"topics-auth-creating-superusers\"></span><h3>Criando superusuários<a class=\"heading-anchor\" href=\"#creating-superusers\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Criando superusuários usando o commando <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></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>$ python manage.py createsuperuser --username=joe --email=joe@example.com\n</code></pre></div>\n<p>Será solicitada então uma senha. Após inserí-la, a conta de usuário será criada imediatamente. Caso seja desligada a opção:<a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#cmdoption-createsuperuser-username\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--username</span></code></a> ou <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#cmdoption-createsuperuser-email\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--email</span></code></a>, estes valores serão solicitados.</p>\n</section>\n<section id=\"changing-passwords\">\n<h3>Mudando as senhas<a class=\"heading-anchor\" href=\"#changing-passwords\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O Django não armazena senha em sua forma bruta (texto limpo) no modelo do usuário, mas somente um “hash” (see <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/passwords/\"><span class=\"doc\">documentação de como as senhas são manipuladas</span></a> para detalhes completos). Por causa disso, não tente manipular diretamente o atributo “password” do usuário. Este é o porque de uma função auxiliar ser usada para criar um usuário.</p>\n<p>Para mudar a senha de usuários, você tem várias opções:</p>\n<p>O <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#django-admin-changepassword\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">changepassword</span> <span class=\"pre\">*username*</span></code></a> oferece um método para alteração da senha do “User” na linha de comando. Ele pergunta no “prompt” para alterar uma senha de um dado usuário a qual você deve informar duas vezes. Se ambas combinam, uma  nova senha será alterada imediatamente. Se você não fornecer um usuário, o comando irá tentar alterar a senha do nome do usuário que combine com o usuário do sistema.</p>\n<p>Você pode também mudar a senha programaticamente, usando <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_password()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">set_password</span><span class=\"p\">(</span><span class=\"s1\">&#39;new password&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Se você tiver a administração do Django instalado, você também pode alterar a senha do usuário nas : ref: páginas de administração do ` sistema de autenticação &lt; auth -admin &gt;` .</p>\n<p>Django também fornece : ref: ` views &lt; built-in -auth- vistas &gt;` e : ref: ` forms &lt; built-in -auth-forms&gt;` que podem ser utilizados para permitir que os usuários alterem suas próprias senhas.</p>\n<p>Ao alterar a senha de um usuário, todas as sessões deste serão finalizadas se <a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware\" title=\"django.contrib.auth.middleware.SessionAuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code></a> estiver habilitado. Veja : ref:session-invalidation-on-password-change  para detalhes.</p>\n</section>\n<section id=\"authenticating-users\">\n<h3>Autenticando usuários<a class=\"heading-anchor\" href=\"#authenticating-users\"><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.auth.authenticate\">\n<span class=\"sig-name descname\"><span class=\"pre\">authenticate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">\\**credentials</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.authenticate\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Para autenticar um dado usuário e senha, utilize <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a>. As credenciais serão pegas na forma de argumentos chave valor, o que para a configuração padrão é “usuário” e “senha” e será retornado um objeto do tipo <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> se a senha for válida para este usuário. Caso a senha seja inválida, a função <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> retornará “None”. Exemplo:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">authenticate</span>\n<span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">authenticate</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"s1\">&#39;secret&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">user</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n    <span class=\"c1\"># the password verified for the user</span>\n    <span class=\"k\">if</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;User is valid, active and authenticated&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;The password is valid, but the account has been disabled!&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># the authentication system was unable to verify the username and password</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;The username and password were incorrect.&quot;</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>Esta é a maneira “baixo nível” para autenticar um grupo de credenciais; por exemplo, é utilizado pela <a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code></a>. À não ser que você esteja escrevendo seu próprio sistema de autenticação, você provavelmente não utlizará isso. Caso esteja procurando por uma maneira de limitar o acesso do usuário logado, veja o <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> decorator.</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"permissions-and-authorization\">\n<span id=\"topic-authorization\"></span><h2>Permissões e Autorização<a class=\"heading-anchor\" href=\"#permissions-and-authorization\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django vem com um sistema simples de permissões. Ele fornece uma maneira de atribuir permissões a usuários e grupos de usuários específicos.</p>\n<p>É usado pelo site admin Django, mas você é livre para usar em seu próprio código.</p>\n<p>O site admin Django usa as seguintes permissões:</p>\n<ul class=\"simple\">\n<li><p>Acesso para visualizar o formulário “adicionar” e adicionar um objeto é limitado para usuários com a permissão “adicionar” para aquele tipo de objeto.</p></li>\n<li><p>Acesso para visualizar o formulário “editar” e editar um objeto é limitado para usuários com a permissão “editar” para aquele tipo de objeto.</p></li>\n<li><p>Acesso para remover um objeto é limitado para usuários com a permissão “remover” para aquele tipo de objeto.</p></li>\n</ul>\n<p>Permissões podem ser definidas não apenas por tipo de objeto, mas também por instâncias específicas de um objeto. Ao utilizar os métodos <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_add_permission\" title=\"django.contrib.admin.ModelAdmin.has_add_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_add_permission()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission\" title=\"django.contrib.admin.ModelAdmin.has_change_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_change_permission()</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_delete_permission\" title=\"django.contrib.admin.ModelAdmin.has_delete_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_delete_permission()</span></code></a> oferecidos pela classe <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a>, é posível customizar permissões para diferentes instâncias de objetos do mesmo tipo.</p>\n<p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> objects have two many-to-many\nfields: <code class=\"docutils literal notranslate\"><span class=\"pre\">groups</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">user_permissions</span></code>.\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> objects can access their related\nobjects in the same way as any other <a class=\"reference internal\" href=\"/pt-br/1.9/topics/db/models/\"><span class=\"doc\">Django model</span></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=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">groups</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">group_list</span><span class=\"p\">]</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">user_permissions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">permission_list</span><span class=\"p\">]</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">user_permissions</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">permission</span><span class=\"p\">,</span> <span class=\"n\">permission</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">user_permissions</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">permission</span><span class=\"p\">,</span> <span class=\"n\">permission</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">user_permissions</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"default-permissions\">\n<h3>Permissões padrão<a class=\"heading-anchor\" href=\"#default-permissions\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> is listed in your <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>\nsetting, it will ensure that three default permissions – add, change and\ndelete – are created for each Django model defined in one of your installed\napplications.</p>\n<p>These permissions will be created when you run <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code></a>; the first time you run <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></code> after adding\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> to <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, the default permissions\nwill be created for all previously-installed models, as well as for any new\nmodels being installed at that time. Afterward, it will create default\npermissions for new models each time you run <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code></a> (the function that creates permissions is connected to the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_migrate</span></code></a> signal).</p>\n<p>Assuming you have an application with an\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/options/#django.db.models.Options.app_label\" title=\"django.db.models.Options.app_label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">app_label</span></code></a> <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> and a model named <code class=\"docutils literal notranslate\"><span class=\"pre\">Bar</span></code>,\nto test for basic permissions you should use:</p>\n<ul class=\"simple\">\n<li><p>Adicionar: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.add_bar')</span></code></p></li>\n<li><p>mudar: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.change_bar')</span></code></p></li>\n<li><p>deletar: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.delete_bar')</span></code></p></li>\n</ul>\n<p>A <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id2\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Permission</span></code></a> é raramente acessada diretamente.</p>\n</section>\n<section id=\"groups\">\n<h3>Grupos<a class=\"heading-anchor\" href=\"#groups\"><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/contrib/auth/#id5\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.models.Group</span></code></a> models are a generic way of\ncategorizing users so you can apply permissions, or some other label, to those\nusers. A user can belong to any number of groups.</p>\n<p>A user in a group automatically has the permissions granted to that group. For\nexample, if the group <code class=\"docutils literal notranslate\"><span class=\"pre\">Site</span> <span class=\"pre\">editors</span></code> has the permission\n<code class=\"docutils literal notranslate\"><span class=\"pre\">can_edit_home_page</span></code>, any user in that group will have that permission.</p>\n<p>Beyond permissions, groups are a convenient way to categorize users to give\nthem some label, or extended functionality. For example, you could create a\ngroup <code class=\"docutils literal notranslate\"><span class=\"pre\">'Special</span> <span class=\"pre\">users'</span></code>, and you could write code that could, say, give them\naccess to a members-only portion of your site, or send them members-only email\nmessages.</p>\n</section>\n<section id=\"programmatically-creating-permissions\">\n<h3>Programaticamente criando permissões<a class=\"heading-anchor\" href=\"#programmatically-creating-permissions\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>While <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#custom-permissions\"><span class=\"std std-ref\">custom permissions</span></a> can be defined within\na model’s <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> class, you can also create permissions directly. For\nexample, you can create the <code class=\"docutils literal notranslate\"><span class=\"pre\">can_publish</span></code> permission for a <code class=\"docutils literal notranslate\"><span class=\"pre\">BlogPost</span></code> model\nin <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp</span></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=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BlogPost</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Permission</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.contenttypes.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ContentType</span>\n\n<span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">ContentType</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_for_model</span><span class=\"p\">(</span><span class=\"n\">BlogPost</span><span class=\"p\">)</span>\n<span class=\"n\">permission</span> <span class=\"o\">=</span> <span class=\"n\">Permission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n    <span class=\"n\">codename</span><span class=\"o\">=</span><span class=\"s1\">&#39;can_publish&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Can Publish Posts&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">content_type</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>The permission can then be assigned to a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> via its <code class=\"docutils literal notranslate\"><span class=\"pre\">user_permissions</span></code>\nattribute or to a <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id5\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Group</span></code></a> via its\n<code class=\"docutils literal notranslate\"><span class=\"pre\">permissions</span></code> attribute.</p>\n</section>\n<section id=\"permission-caching\">\n<h3>Cache de permissões<a class=\"heading-anchor\" href=\"#permission-caching\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend\" title=\"django.contrib.auth.backends.ModelBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code></a> caches permissions on\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> object after the first time they need to be fetched for a\npermissions check. This is typically fine for the request-response cycle since\npermissions are not typically checked immediately after they are added (in the\nadmin, for example). If you are adding permissions and checking them immediately\nafterward, in a test or view for example, the easiest solution is to re-fetch\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> from the database. 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><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Permission</span><span class=\"p\">,</span> <span class=\"n\">User</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_object_or_404</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">user_gains_perms</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user_id</span><span class=\"p\">):</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">user_id</span><span class=\"p\">)</span>\n    <span class=\"c1\"># any permission check will cache the current set of permissions</span>\n    <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_bar&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">permission</span> <span class=\"o\">=</span> <span class=\"n\">Permission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">codename</span><span class=\"o\">=</span><span class=\"s1\">&#39;change_bar&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">user_permissions</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">permission</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Checking the cached permission set</span>\n    <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_bar&#39;</span><span class=\"p\">)</span>  <span class=\"c1\"># False</span>\n\n    <span class=\"c1\"># Request new instance of User</span>\n    <span class=\"c1\"># Be aware that user.refresh_from_db() won&#39;t clear the cache.</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">user_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Permission cache is repopulated from the database</span>\n    <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_bar&#39;</span><span class=\"p\">)</span>  <span class=\"c1\"># True</span>\n\n    <span class=\"o\">...</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"authentication-in-web-requests\">\n<span id=\"auth-web-requests\"></span><h2>Autenticação em requisições Web<a class=\"heading-anchor\" href=\"#authentication-in-web-requests\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django uses <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/sessions/\"><span class=\"doc\">sessions</span></a> and middleware to hook the\nauthentication system into <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\"><span class=\"pre\">request</span> <span class=\"pre\">objects</span></code></a>.</p>\n<p>These provide a <a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.user</span></code></a>  attribute\non every request which represents the current user. If the current user has not\nlogged in, this attribute will be set to an instance\nof <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnonymousUser</span></code></a>, otherwise it will be an\ninstance of <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a>.</p>\n<p>You can tell them apart with\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_authenticated()</span></code></a>, like so:</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\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n    <span class=\"c1\"># Do something for authenticated users.</span>\n    <span class=\"o\">...</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Do something for anonymous users.</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<section id=\"how-to-log-a-user-in\">\n<span id=\"id2\"></span><h3>Como autenticar um usuário<a class=\"heading-anchor\" href=\"#how-to-log-a-user-in\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Caso queira adicionar um usuário autenticado à sessão atual - isto pode ser feito com a função <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></code></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.login\">\n<span class=\"sig-name descname\"><span class=\"pre\">login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.login\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>To log a user in, from a view, use <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></code></a>. It\ntakes an <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\"><span class=\"pre\">HttpRequest</span></code></a> object and a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> object.\n<a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></code></a> saves the user’s ID in the session,\nusing Django’s session framework.</p>\n<p>Note que qualquer dado definido durante um sessão anônima, fica retido na sessão após um usuário logar.</p>\n<p>Estes exemplos mostram como é possível utilizar ambas funções\n<a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> e <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">authenticate</span><span class=\"p\">,</span> <span class=\"n\">login</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">username</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"s1\">&#39;username&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">password</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"s1\">&#39;password&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">authenticate</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"n\">username</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"n\">password</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n            <span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">)</span>\n            <span class=\"c1\"># Redirect to a success page.</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Return a &#39;disabled account&#39; error message</span>\n            <span class=\"o\">...</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Return an &#39;invalid login&#39; error message.</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition-calling-authenticate-first admonition\">\n<p class=\"admonition-title\">Chamando <code class=\"docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code> primeiro</p>\n<p>When you’re manually logging a user in, you <em>must</em> successfully authenticate\nthe user with <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> before you call\n<a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></code></a>.\n<a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a>\nsets an attribute on the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> noting\nwhich authentication backend successfully authenticated that user (see the\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">backends documentation</span></a> for details), and\nthis information is needed later during the login process. An error will be\nraised if you try to login a user object retrieved from the database\ndirectly.</p>\n</aside>\n<section id=\"selecting-the-authentication-backend\">\n<h4>Selecting the authentication backend<a class=\"heading-anchor\" href=\"#selecting-the-authentication-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When a user logs in, the user’s ID and the backend that was used for\nauthentication are saved in the user’s session. This allows the same\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">authentication backend</span></a> to fetch the user’s\ndetails on a future request. The authentication backend to save in the session\nis selected as follows:</p>\n<ol class=\"arabic simple\">\n<li><p>Use the value of the optional <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> argument, if provided.</p></li>\n<li><p>Use the value of the <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code> attribute, if present. This allows\npairing <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> and\n<a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login()</span></code></a>:\n<a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a>\nsets the <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code> attribute on the <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> object it returns.</p></li>\n<li><p>Use the <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> in <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a>, if there is only\none.</p></li>\n<li><p>Caso contrário, gera uma exceção.</p></li>\n</ol>\n<p>In cases 1 and 2, the value of the <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> argument or the <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code>\nattribute should be a dotted import path string (like that found in\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a>), not the actual backend class.</p>\n</section>\n</section>\n<section id=\"how-to-log-a-user-out\">\n<h3>How to log a user out<a class=\"heading-anchor\" href=\"#how-to-log-a-user-out\"><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.auth.logout\">\n<span class=\"sig-name descname\"><span class=\"pre\">logout</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.logout\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>To log out a user who has been logged in via\n<a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.login()</span></code></a>, use\n<a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.logout()</span></code></a> within your view. It takes an\n<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\"><span class=\"pre\">HttpRequest</span></code></a> object and has no return value.\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><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">logout</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">logout_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">logout</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Redirect to a success page.</span>\n</code></pre></div>\n<p>Note that <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logout()</span></code></a> doesn’t throw any errors if\nthe user wasn’t logged in.</p>\n<p>When you call <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logout()</span></code></a>, the session data for\nthe current request is completely cleaned out. All existing data is\nremoved. This is to prevent another person from using the same Web browser\nto log in and have access to the previous user’s session data. If you want\nto put anything into the session that will be available to the user\nimmediately after logging out, do that <em>after</em> calling\n<a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.logout()</span></code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"limiting-access-to-logged-in-users\">\n<h3>Limitando o acesso de usuários authenticados<a class=\"heading-anchor\" href=\"#limiting-access-to-logged-in-users\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-raw-way\">\n<h4>The raw way<a class=\"heading-anchor\" href=\"#the-raw-way\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The simple, raw way to limit access to pages is to check\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">request.user.is_authenticated()</span></code></a> and either redirect to a\nlogin page:</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=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">redirect</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">?next=</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LOGIN_URL</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">))</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>…or display an error 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><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;myapp/login_error.html&#39;</span><span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n</section>\n<section id=\"the-login-required-decorator\">\n<h4>O <code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> decorator<a class=\"heading-anchor\" href=\"#the-login-required-decorator\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.login_required\">\n<span class=\"sig-name descname\"><span class=\"pre\">login_required</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'next'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.login_required\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>As a shortcut, you can use the convenient\n<a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> decorator:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">login_required</span>\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> does the following:</p>\n<ul class=\"simple\">\n<li><p>If the user isn’t logged in, redirect to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a>, passing the current absolute\npath in the query string. Example: <code class=\"docutils literal notranslate\"><span class=\"pre\">/accounts/login/?next=/polls/3/</span></code>.</p></li>\n<li><p>If the user is logged in, execute the view normally. The view code is\nfree to assume the user is logged in.</p></li>\n</ul>\n<p>By default, the path that the user should be redirected to upon\nsuccessful authentication is stored in a query string parameter called\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;next&quot;</span></code>. If you would prefer to use a different name for this parameter,\n<a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> takes an\noptional <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> parameter:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">login_required</span>\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span><span class=\"n\">redirect_field_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;my_redirect_field&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Note that if you provide a value to <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code>, you will most\nlikely need to customize your login template as well, since the template\ncontext variable which stores the redirect path will use the value of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> as its key rather than <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;next&quot;</span></code> (the default).</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> also takes an\noptional <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code> parameter. 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><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">login_required</span>\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span><span class=\"n\">login_url</span><span class=\"o\">=</span><span class=\"s1\">&#39;/accounts/login/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Note that if you don’t specify the <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code> parameter, you’ll need to\nensure that the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> and your login\nview are properly associated. For example, using the defaults, add the\nfollowing lines to your URLconf:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">auth_views</span>\n\n<span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^accounts/login/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">),</span>\n</code></pre></div>\n<p>The <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> also accepts view function\nnames and <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">named URL patterns</span></a>. This allows you\nto freely remap your login view within your URLconf without having to\nupdate the setting.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> decorator does NOT check the <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> flag on a\nuser.</p>\n</aside>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>If you are writing custom views for Django’s admin (or need the same\nauthorization check that the built-in views use), you may find the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/admin/#django.contrib.admin.views.decorators.staff_member_required\" title=\"django.contrib.admin.views.decorators.staff_member_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.views.decorators.staff_member_required()</span></code></a>\ndecorator a useful alternative to <code class=\"docutils literal notranslate\"><span class=\"pre\">login_required()</span></code>.</p>\n</aside>\n</section>\n<section id=\"the-loginrequired-mixin\">\n<h4>O <code class=\"docutils literal notranslate\"><span class=\"pre\">LoginRequired</span></code> mixin<a class=\"heading-anchor\" href=\"#the-loginrequired-mixin\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When using <a class=\"reference internal\" href=\"/pt-br/1.9/topics/class-based-views/\"><span class=\"doc\">class-based views</span></a>, you can\nachieve the same behavior as with <code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> by using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">LoginRequiredMixin</span></code>. This mixin should be at the leftmost position in the\ninheritance list.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.LoginRequiredMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">LoginRequiredMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.LoginRequiredMixin\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.9\">\n<p class=\"version-note-title\">New in Django 1.9</p></aside>\n<p>If a view is using this mixin, all requests by non-authenticated users will\nbe redirected to the login page or shown an HTTP 403 Forbidden error,\ndepending on the\n<a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\" title=\"django.contrib.auth.mixins.AccessMixin.raise_exception\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">raise_exception</span></code></a> parameter.</p>\n<p>You can set any of the parameters of\n<a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AccessMixin</span></code></a> to customize the handling\nof unauthorized users:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.mixins</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LoginRequiredMixin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyView</span><span class=\"p\">(</span><span class=\"n\">LoginRequiredMixin</span><span class=\"p\">,</span> <span class=\"n\">View</span><span class=\"p\">):</span>\n    <span class=\"n\">login_url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/login/&#39;</span>\n    <span class=\"n\">redirect_field_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;redirect_to&#39;</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Just as the <code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> decorator, this mixin does NOT check the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> flag on a user.</p>\n</aside>\n</section>\n<section id=\"limiting-access-to-logged-in-users-that-pass-a-test\">\n<h4>Limiting access to logged-in users that pass a test<a class=\"heading-anchor\" href=\"#limiting-access-to-logged-in-users-that-pass-a-test\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>To limit access based on certain permissions or some other test, you’d do\nessentially the same thing as described in the previous section.</p>\n<p>The simple way is to run your test on <a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.user</span></code></a> in the view directly. For example, this view\nchecks to make sure the user has an email in the desired domain and if not,\nredirects to the login page:</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=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">redirect</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;@example.com&#39;</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;/login/?next=</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.user_passes_test\">\n<span class=\"sig-name descname\"><span class=\"pre\">user_passes_test</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">test_func</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'next'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.user_passes_test\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>As a shortcut, you can use the convenient <code class=\"docutils literal notranslate\"><span class=\"pre\">user_passes_test</span></code> decorator\nwhich performs a redirect when the callable returns <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">user_passes_test</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">email_check</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;@example.com&#39;</span><span class=\"p\">)</span>\n\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">email_check</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">user_passes_test()</span></code></a> takes a required\nargument: a callable that takes a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> object and returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if\nthe user is allowed to view the page. Note that\n<a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">user_passes_test()</span></code></a> does not\nautomatically check that the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> is\nnot anonymous.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.decorators.user_passes_test\" title=\"django.contrib.auth.decorators.user_passes_test\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">user_passes_test()</span></code></a> takes two\noptional arguments:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code></dt><dd><p>Lets you specify the URL that users who don’t pass the test will be\nredirected to. It may be a login page and defaults to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> if you don’t specify one.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code></dt><dd><p>Same as for <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a>.\nSetting it to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> removes it from the URL, which you may want to do\nif you are redirecting users that don’t pass the test to a non-login\npage where there’s no “next page”.</p>\n</dd>\n</dl>\n<p>Por exemplo:</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\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">email_check</span><span class=\"p\">,</span> <span class=\"n\">login_url</span><span class=\"o\">=</span><span class=\"s1\">&#39;/login/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UserPassesTestMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.9\">\n<p class=\"version-note-title\">New in Django 1.9</p></aside>\n<p>When using <a class=\"reference internal\" href=\"/pt-br/1.9/topics/class-based-views/\"><span class=\"doc\">class-based views</span></a>, you\ncan use the <code class=\"docutils literal notranslate\"><span class=\"pre\">UserPassesTestMixin</span></code> to do this.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin.test_func\">\n<span class=\"sig-name descname\"><span class=\"pre\">test_func</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.test_func\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>You have to override the <code class=\"docutils literal notranslate\"><span class=\"pre\">test_func()</span></code> method of the class to\nprovide the test that is performed. Furthermore, you can set any of the\nparameters of <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AccessMixin</span></code></a> to\ncustomize the handling of unauthorized users:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.mixins</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserPassesTestMixin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyView</span><span class=\"p\">(</span><span class=\"n\">UserPassesTestMixin</span><span class=\"p\">,</span> <span class=\"n\">View</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;@example.com&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.UserPassesTestMixin.get_test_func\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_test_func</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.get_test_func\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>You can also override the <code class=\"docutils literal notranslate\"><span class=\"pre\">get_test_func()</span></code> method to have the mixin\nuse a differently named function for its checks (instead of\n<a class=\"reference internal\" href=\"#django.contrib.auth.mixins.UserPassesTestMixin.test_func\" title=\"django.contrib.auth.mixins.UserPassesTestMixin.test_func\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">test_func()</span></code></a>).</p>\n</dd></dl>\n\n<aside class=\"admonition-stacking-userpassestestmixin admonition\">\n<p class=\"admonition-title\">Stacking <code class=\"docutils literal notranslate\"><span class=\"pre\">UserPassesTestMixin</span></code></p>\n<p>Due to the way <code class=\"docutils literal notranslate\"><span class=\"pre\">UserPassesTestMixin</span></code> is implemented, you cannot stack\nthem in your inheritance list. The following does NOT work:</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\">class</span><span class=\"w\"> </span><span class=\"nc\">TestMixin1</span><span class=\"p\">(</span><span class=\"n\">UserPassesTestMixin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;@example.com&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestMixin2</span><span class=\"p\">(</span><span class=\"n\">UserPassesTestMixin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyView</span><span class=\"p\">(</span><span class=\"n\">TestMixin1</span><span class=\"p\">,</span> <span class=\"n\">TestMixin2</span><span class=\"p\">,</span> <span class=\"n\">View</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">TestMixin1</span></code> would call <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> and take that result into\naccount, <code class=\"docutils literal notranslate\"><span class=\"pre\">TestMixin1</span></code> wouldn’t work standalone anymore.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"the-permission-required-decorator\">\n<h4>O <code class=\"docutils literal notranslate\"><span class=\"pre\">permission_required</span></code> decorator<a class=\"heading-anchor\" href=\"#the-permission-required-decorator\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.decorators.permission_required\">\n<span class=\"sig-name descname\"><span class=\"pre\">permission_required</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">perm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raise_exception</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.decorators.permission_required\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>It’s a relatively common task to check whether a user has a particular\npermission. For that reason, Django provides a shortcut for that case: the\n<a class=\"reference internal\" href=\"#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">permission_required()</span></code></a> decorator.:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">permission_required</span>\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.can_vote&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Just like the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_perm()</span></code></a> method,\npermission names take the form <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&lt;app</span> <span class=\"pre\">label&gt;.&lt;permission</span> <span class=\"pre\">codename&gt;&quot;</span></code>\n(i.e. <code class=\"docutils literal notranslate\"><span class=\"pre\">polls.can_vote</span></code> for a permission on a model in the <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>\napplication).</p>\n<p>The decorator may also take an iterable of permissions, in which case the\nuser must have all of the permissions in order to access the view.</p>\n<p>Note that <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.permission_required\" title=\"django.contrib.auth.decorators.permission_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">permission_required()</span></code></a>\nalso takes an optional <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code> parameter:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">permission_required</span>\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.can_vote&#39;</span><span class=\"p\">,</span> <span class=\"n\">login_url</span><span class=\"o\">=</span><span class=\"s1\">&#39;/loginpage/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>As in the <a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> decorator,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code> defaults to <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a>.</p>\n<p>If the <code class=\"docutils literal notranslate\"><span class=\"pre\">raise_exception</span></code> parameter is given, the decorator will raise\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a>, prompting <a class=\"reference internal\" href=\"/pt-br/1.9/ref/views/#http-forbidden-view\"><span class=\"std std-ref\">the 403\n(HTTP Forbidden) view</span></a> instead of redirecting to the\nlogin page.</p>\n<p>If you want to use <code class=\"docutils literal notranslate\"><span class=\"pre\">raise_exception</span></code> but also give your users a chance to\nlogin first, you can add the\n<a class=\"reference internal\" href=\"#django.contrib.auth.decorators.login_required\" title=\"django.contrib.auth.decorators.login_required\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">login_required()</span></code></a> decorator:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.can_vote&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"1.9\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>In older versions, the <code class=\"docutils literal notranslate\"><span class=\"pre\">permission</span></code> parameter only worked with\nstrings, lists, and tuples instead of strings and any iterable.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"the-permissionrequiredmixin-mixin\">\n<h4>O <code class=\"docutils literal notranslate\"><span class=\"pre\">PermissionRequiredMixin</span></code> mixin<a class=\"heading-anchor\" href=\"#the-permissionrequiredmixin-mixin\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>To apply permission checks to <a class=\"reference internal\" href=\"/pt-br/1.9/ref/class-based-views/\"><span class=\"doc\">class-based views</span></a>, you can use the <code class=\"docutils literal notranslate\"><span class=\"pre\">PermissionRequiredMixin</span></code>:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PermissionRequiredMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.9\">\n<p class=\"version-note-title\">New in Django 1.9</p></aside>\n<p>This mixin, just like the <code class=\"docutils literal notranslate\"><span class=\"pre\">permission_required</span></code>\ndecorator, checks whether the user accessing a view has all given\npermissions. You should specify the permission (or an iterable of\npermissions) using the <code class=\"docutils literal notranslate\"><span class=\"pre\">permission_required</span></code> parameter:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.mixins</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">PermissionRequiredMixin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyView</span><span class=\"p\">(</span><span class=\"n\">PermissionRequiredMixin</span><span class=\"p\">,</span> <span class=\"n\">View</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;polls.can_vote&#39;</span>\n    <span class=\"c1\"># Or multiple of permissions:</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;polls.can_open&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;polls.can_edit&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>You can set any of the parameters of\n<a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin\" title=\"django.contrib.auth.mixins.AccessMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AccessMixin</span></code></a> to customize the handling\nof unauthorized users.</p>\n<p>You may also override these methods:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_permission_required</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns an iterable of permission names used by the mixin. Defaults to\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">permission_required</span></code> attribute, converted to a tuple if\nnecessary.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.PermissionRequiredMixin.has_permission\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_permission</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.has_permission\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a boolean denoting whether the current user has permission to\nexecute the decorated view. By default, this returns the result of\ncalling <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.has_perms\" title=\"django.contrib.auth.models.User.has_perms\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_perms()</span></code></a> with the\nlist of permissions returned by <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\" title=\"django.contrib.auth.mixins.PermissionRequiredMixin.get_permission_required\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_permission_required()</span></code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"redirecting-unauthorized-requests-in-class-based-views\">\n<h3>Redirecting unauthorized requests in class-based views<a class=\"heading-anchor\" href=\"#redirecting-unauthorized-requests-in-class-based-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To ease the handling of access restrictions in <a class=\"reference internal\" href=\"/pt-br/1.9/ref/class-based-views/\"><span class=\"doc\">class-based views</span></a>, the <code class=\"docutils literal notranslate\"><span class=\"pre\">AccessMixin</span></code> can be used to redirect a\nuser to the login page or issue an HTTP 403 Forbidden response.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AccessMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.9\">\n<p class=\"version-note-title\">New in Django 1.9</p></aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.login_url\">\n<span class=\"sig-name descname\"><span class=\"pre\">login_url</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.login_url\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Default return value for <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\" title=\"django.contrib.auth.mixins.AccessMixin.get_login_url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_login_url()</span></code></a>.  Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>\nin which case <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\" title=\"django.contrib.auth.mixins.AccessMixin.get_login_url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_login_url()</span></code></a> falls back to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.permission_denied_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">permission_denied_message</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.permission_denied_message\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Default return value for <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\" title=\"django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_permission_denied_message()</span></code></a>.\nDefaults to an empty string.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.redirect_field_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">redirect_field_name</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.redirect_field_name\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Default return value for <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\" title=\"django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_redirect_field_name()</span></code></a>. Defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;next&quot;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.raise_exception\">\n<span class=\"sig-name descname\"><span class=\"pre\">raise_exception</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>If this attribute is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a> exception will be\nraised instead of the redirect. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_login_url\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_login_url</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_login_url\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the URL that users who don’t pass the test will be redirected\nto. Returns <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.login_url\" title=\"django.contrib.auth.mixins.AccessMixin.login_url\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">login_url</span></code></a> if set, or <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> otherwise.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_permission_denied_message</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_permission_denied_message\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.raise_exception\" title=\"django.contrib.auth.mixins.AccessMixin.raise_exception\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">raise_exception</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, this method can be used to\ncontrol the error message passed to the error handler for display to\nthe user. Returns the <a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.permission_denied_message\" title=\"django.contrib.auth.mixins.AccessMixin.permission_denied_message\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">permission_denied_message</span></code></a> attribute by\ndefault.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_redirect_field_name</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.get_redirect_field_name\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the name of the query parameter that will contain the URL the\nuser should be redirected to after a successful login. If you set this\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, a query parameter won’t be added. Returns the\n<a class=\"reference internal\" href=\"#django.contrib.auth.mixins.AccessMixin.redirect_field_name\" title=\"django.contrib.auth.mixins.AccessMixin.redirect_field_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code></a> attribute by default.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.AccessMixin.handle_no_permission\">\n<span class=\"sig-name descname\"><span class=\"pre\">handle_no_permission</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.AccessMixin.handle_no_permission\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Depending on the value of <code class=\"docutils literal notranslate\"><span class=\"pre\">raise_exception</span></code>, the method either raises\na <a class=\"reference internal\" href=\"/pt-br/1.9/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a> exception or\nredirects the user to the <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code>, optionally including the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> if it is set.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"session-invalidation-on-password-change\">\n<span id=\"id3\"></span><h4>Session invalidation on password change<a class=\"heading-anchor\" href=\"#session-invalidation-on-password-change\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Aviso</p>\n<p>This protection only applies if\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware\" title=\"django.contrib.auth.middleware.SessionAuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code></a>\nis enabled in <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-MIDDLEWARE_CLASSES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE_CLASSES</span></code></a>. It’s included if\n<code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> was generated by <a class=\"reference internal\" href=\"/pt-br/1.9/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></code></a> on Django ≥ 1.7.</p>\n<p>Session verification will become mandatory in Django 1.10 regardless of\nwhether or not <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code> is enabled. If you have\na pre-1.7 project or one generated using a template that doesn’t include\n<code class=\"docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code>, consider enabling it before then after\nreading the upgrade considerations below.</p>\n</aside>\n<p>If your <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></code></a> inherits from\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code></a> or implements its own\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\" title=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_session_auth_hash()</span></code></a>\nmethod, authenticated sessions will include the hash returned by this function.\nIn the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code></a> case, this is an\nHMAC of the password field. If the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware\" title=\"django.contrib.auth.middleware.SessionAuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code></a> is\nenabled, Django verifies that the hash sent along with each request matches\nthe one that’s computed server-side. This allows a user to log out all of their\nsessions by changing their password.</p>\n<p>The default password change views included with Django,\n<a class=\"reference internal\" href=\"#django.contrib.auth.views.password_change\" title=\"django.contrib.auth.views.password_change\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.views.password_change()</span></code></a> and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">user_change_password</span></code> view in the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a> admin, update\nthe session with the new password hash so that a user changing their own\npassword won’t log themselves out. If you have a custom password change view\nand wish to have similar behavior, use this function:</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.mixins.update_session_auth_hash\">\n<span class=\"sig-name descname\"><span class=\"pre\">update_session_auth_hash</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.mixins.update_session_auth_hash\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This function takes the current request and the updated user object from\nwhich the new session hash will be derived and updates the session hash\nappropriately. Example usage:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">update_session_auth_hash</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">password_change</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">update_session_auth_hash</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<p>If you are upgrading an existing site and wish to enable this middleware without\nrequiring all your users to re-login afterward, you should first upgrade to\nDjango 1.7 and run it for a while so that as sessions are naturally recreated\nas users login, they include the session hash as described above. Once you\nstart running your site with\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware\" title=\"django.contrib.auth.middleware.SessionAuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code></a>, any\nusers who have not logged in and had their session updated with the verification\nhash will have their existing session invalidated and be required to login.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Since\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\" title=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_session_auth_hash()</span></code></a>\nis based on <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>, updating your site to use a new secret\nwill invalidate all existing sessions.</p>\n</aside>\n</section>\n</section>\n<section id=\"module-django.contrib.auth.views\">\n<span id=\"authentication-views\"></span><span id=\"built-in-auth-views\"></span><h3>Authentication Views<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django provides several views that you can use for handling login, logout, and\npassword management. These make use of the <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">stock auth forms</span></a> but you can pass in your own forms as well.</p>\n<p>Django provides no default template for the authentication views. You should\ncreate your own templates for the views you want to use. The template context\nis documented in each view, see <a class=\"reference internal\" href=\"#all-authentication-views\"><span class=\"std std-ref\">All authentication views</span></a>.</p>\n<section id=\"using-the-views\">\n<span id=\"id4\"></span><h4>Using the views<a class=\"heading-anchor\" href=\"#using-the-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>There are different methods to implement these views in your project. The\neasiest way is to include the provided URLconf in <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.urls</span></code>\nin your own URLconf, 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><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"s1\">&#39;^&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;django.contrib.auth.urls&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>This will include the following URL patterns:</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>^login/$ [name=&#39;login&#39;]\n^logout/$ [name=&#39;logout&#39;]\n^password_change/$ [name=&#39;password_change&#39;]\n^password_change/done/$ [name=&#39;password_change_done&#39;]\n^password_reset/$ [name=&#39;password_reset&#39;]\n^password_reset/done/$ [name=&#39;password_reset_done&#39;]\n^reset/(?P&lt;uidb64&gt;[0-9A-Za-z_\\-]+)/(?P&lt;token&gt;[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name=&#39;password_reset_confirm&#39;]\n^reset/done/$ [name=&#39;password_reset_complete&#39;]\n</code></pre></div>\n<p>The views provide a URL name for easier reference. See <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/\"><span class=\"doc\">the URL\ndocumentation</span></a> for details on using named URL patterns.</p>\n<p>If you want more control over your URLs, you can reference a specific view in\nyour URLconf:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">auth_views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"s1\">&#39;^change-password/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">password_change</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>The views have optional arguments you can use to alter the behavior of the\nview. For example, if you want to change the template name a view uses, you can\nprovide the <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> argument. A way to do this is to provide keyword\narguments in the URLconf, these will be passed on to the view. 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><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;^change-password/$&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">password_change</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;template_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;change-password.html&#39;</span><span class=\"p\">}</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>All views return a <a class=\"reference internal\" href=\"/pt-br/1.9/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a>\ninstance, which allows you to easily customize the response data before\nrendering. A way to do this is to wrap a view in your own view:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">change_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">template_response</span> <span class=\"o\">=</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">password_change</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Do something with `template_response`</span>\n    <span class=\"k\">return</span> <span class=\"n\">template_response</span>\n</code></pre></div>\n<p>For more details, see the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/template-response/\"><span class=\"doc\">TemplateResponse documentation</span></a>.</p>\n</section>\n<section id=\"all-authentication-views\">\n<span id=\"id5\"></span><h4>All authentication views<a class=\"heading-anchor\" href=\"#all-authentication-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>This is a list with all the views <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> provides. For\nimplementation details see <a class=\"reference internal\" href=\"#using-the-views\"><span class=\"std std-ref\">Using the views</span></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.login\">\n<span class=\"sig-name descname\"><span class=\"pre\">login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name=`registration/login.html`</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name='next'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">authentication_form=AuthenticationForm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app=None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context=None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.login\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">login</span></code></p>\n<p>See <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/\"><span class=\"doc\">the URL documentation</span></a> for details on using\nnamed URL patterns.</p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The name of a template to display for the view used to\nlog the user in. Defaults to <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/login.html</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code>: The name of a <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> field containing the\nURL to redirect to after login. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">authentication_form</span></code>: A callable (typically just a form class) to\nuse for authentication. Defaults to\n<a class=\"reference internal\" href=\"#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n<p>Here’s what <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.views.login</span></code> does:</p>\n<ul class=\"simple\">\n<li><p>If called via <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>, it displays a login form that POSTs to the\nsame URL. More on this in a bit.</p></li>\n<li><p>If called via <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> with user submitted credentials, it tries to log\nthe user in. If login is successful, the view redirects to the URL\nspecified in <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> isn’t provided, it redirects to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_REDIRECT_URL</span></code></a> (which\ndefaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">/accounts/profile/</span></code>). If login isn’t successful, it\nredisplays the login form.</p></li>\n</ul>\n<p>It’s your responsibility to provide the html for the login template\n, called <code class=\"docutils literal notranslate\"><span class=\"pre\">registration/login.html</span></code> by default. This template gets passed\nfour template context variables:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: A <a class=\"reference internal\" href=\"/pt-br/1.9/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> object representing the\n<a class=\"reference internal\" href=\"#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>: The URL to redirect to after successful login. This may\ncontain a query string, too.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code>: The current <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Site</span></code></a>,\naccording to the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> setting. If you don’t have the\nsite framework installed, this will be set to an instance of\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestSite</span></code></a>, which derives the\nsite name and domain from the current\n<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\"><span class=\"pre\">HttpRequest</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site_name</span></code>: An alias for <code class=\"docutils literal notranslate\"><span class=\"pre\">site.name</span></code>. If you don’t have the site\nframework installed, this will be set to the value of\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.META['SERVER_NAME']</span></code></a>.\nFor more on sites, see <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/\"><span class=\"doc\">The “sites” framework</span></a>.</p></li>\n</ul>\n<p>If you’d prefer not to call the template <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/login.html</span></code>,\nyou can pass the <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> parameter via the extra arguments to\nthe view in your URLconf. For example, this URLconf line would use\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">myapp/login.html</span></code> instead:</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=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^accounts/login/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;template_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;myapp/login.html&#39;</span><span class=\"p\">}),</span>\n</code></pre></div>\n<p>You can also specify the name of the <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> field which contains the URL\nto redirect to after login by passing <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> to the view.\nBy default, the field is called <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>.</p>\n<p>Here’s a sample <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/login.html</span></code> template you can use as a\nstarting point. It assumes you have a <code class=\"file docutils literal notranslate\"><span class=\"pre\">base.html</span></code> template that\ndefines a <code class=\"docutils literal notranslate\"><span class=\"pre\">content</span></code> block:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;base.html&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">form.errors</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Your username and password didn&#39;t match. Please try again.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">next</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">user.is_authenticated</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Your account doesn&#39;t have access to this page. To proceed,\n    please login with an account that has access.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Please login to see this page.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;login&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">table</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.username.label_tag</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.username</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.password.label_tag</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.password</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">td</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">tr</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">table</span><span class=\"p\">&gt;</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;login&quot;</span> <span class=\"p\">/&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;hidden&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;next&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">next</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span> <span class=\"p\">/&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n\n<span class=\"c\">{# Assumes you setup the password_reset view in your URLconf #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;password_reset&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Lost password?<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>If you have customized authentication (see\n<a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/\"><span class=\"doc\">Customizing Authentication</span></a>) you can pass\na custom authentication form to the login view via the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">authentication_form</span></code> parameter. This form must accept a <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>\nkeyword argument in its <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> method, and provide a <code class=\"docutils literal notranslate\"><span class=\"pre\">get_user()</span></code>\nmethod which returns the authenticated user object (this method is only\never called after successful form validation).</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.logout\">\n<span class=\"sig-name descname\"><span class=\"pre\">logout</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">next_page</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/logged_out.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'next'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.logout\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Logs a user out.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">logout</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next_page</span></code>: The URL to redirect to after logout.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to display after\nlogging the user out. Defaults to\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/logged_out.html</span></code> if no argument is supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code>: The name of a <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> field containing the\nURL to redirect to after log out. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>. Overrides the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">next_page</span></code> URL if the given <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> parameter is passed.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>: The string “Logged out”, localized.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code>: The current <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Site</span></code></a>,\naccording to the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> setting. If you don’t have the\nsite framework installed, this will be set to an instance of\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestSite</span></code></a>, which derives the\nsite name and domain from the current\n<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\"><span class=\"pre\">HttpRequest</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site_name</span></code>: An alias for <code class=\"docutils literal notranslate\"><span class=\"pre\">site.name</span></code>. If you don’t have the site\nframework installed, this will be set to the value of\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.META['SERVER_NAME']</span></code></a>.\nFor more on sites, see <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/\"><span class=\"doc\">The “sites” framework</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.logout_then_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">logout_then_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.logout_then_login\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Logs a user out, then redirects to the login page.</p>\n<p><strong>URL name:</strong> No default URL provided</p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code>: The URL of the login page to redirect to.\nDefaults to <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_change\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_change</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_change_form.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">post_change_redirect</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_change_form</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">PasswordChangeForm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_change\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Allows a user to change their password.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_change</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to use for\ndisplaying the password change form. Defaults to\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_change_form.html</span></code> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">post_change_redirect</span></code>: The URL to redirect to after a successful\npassword change.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">password_change_form</span></code>: A custom “change password” form which must\naccept a <code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code> keyword argument. The form is responsible for\nactually changing the user’s password. Defaults to\n<a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordChangeForm\" title=\"django.contrib.auth.forms.PasswordChangeForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordChangeForm</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: The password change form (see <code class=\"docutils literal notranslate\"><span class=\"pre\">password_change_form</span></code> above).</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_change_done\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_change_done</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_change_done.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_change_done\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The page shown after a user has changed their password.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_change_done</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to use.\nDefaults to <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_change_done.html</span></code> if not\nsupplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_reset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">is_admin_site</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_form.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">email_template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_email.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">subject_template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_subject.txt'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_reset_form</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">PasswordResetForm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">token_generator</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">default_token_generator</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">post_reset_redirect</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">from_email</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html_email_template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_email_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_reset\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Allows a user to reset their password by generating a one-time use link\nthat can be used to reset the password, and sending that link to the\nuser’s registered email address.</p>\n<p>If the email address provided does not exist in the system, this view\nwon’t send an email, but the user won’t receive any error message either.\nThis prevents information leaking to potential attackers. If you want to\nprovide an error message in this case, you can subclass\n<a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordResetForm</span></code></a> and use the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code> argument.</p>\n<p>Users flagged with an unusable password (see\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.set_unusable_password\" title=\"django.contrib.auth.models.User.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_unusable_password()</span></code></a> aren’t\nallowed to request a password reset to prevent misuse when using an\nexternal authentication source like LDAP. Note that they won’t receive any\nerror message since this would expose their account’s existence but no\nmail will be sent either.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to use for\ndisplaying the password reset form. Defaults to\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_form.html</span></code> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">email_template_name</span></code>: The full name of a template to use for\ngenerating the email with the reset password link. Defaults to\n<code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_email.html</span></code> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">subject_template_name</span></code>: The full name of a template to use for\nthe subject of the email with the reset password link. Defaults\nto <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_subject.txt</span></code> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code>: Form that will be used to get the email of\nthe user to reset the password for. Defaults to\n<a class=\"reference internal\" href=\"#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordResetForm</span></code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">token_generator</span></code>: Instance of the class to check the one time link.\nThis will default to <code class=\"docutils literal notranslate\"><span class=\"pre\">default_token_generator</span></code>, it’s an instance of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.tokens.PasswordResetTokenGenerator</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">post_reset_redirect</span></code>: The URL to redirect to after a successful\npassword reset request.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">from_email</span></code>: A valid email address. By default Django uses\nthe <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>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">html_email_template_name</span></code>: The full name of a template to use\nfor generating a <code class=\"docutils literal notranslate\"><span class=\"pre\">text/html</span></code> multipart email with the password reset\nlink. By default, HTML email is not sent.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_email_context</span></code>: A dictionary of context data that will available\nin the email template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.8\">\n<p class=\"version-note-title\">Deprecated since Django 1.8</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.8: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">is_admin_site</span></code> argument is deprecated and will be removed in\nDjango 1.10.</p>\n</aside>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n<aside class=\"version-note version-added\" data-version=\"1.9\">\n<p class=\"version-note-title\">New in Django 1.9</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">extra_email_context</span></code> parameter was added.</p>\n</aside>\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: The form (see <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code> above) for resetting\nthe user’s password.</p></li>\n</ul>\n<p><strong>Email template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code>: An alias for <code class=\"docutils literal notranslate\"><span class=\"pre\">user.email</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code>: The current <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a>,\naccording to the <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> form field. Only active users are able to\nreset their passwords (<code class=\"docutils literal notranslate\"><span class=\"pre\">User.is_active</span> <span class=\"pre\">is</span> <span class=\"pre\">True</span></code>).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site_name</span></code>: An alias for <code class=\"docutils literal notranslate\"><span class=\"pre\">site.name</span></code>. If you don’t have the site\nframework installed, this will be set to the value of\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.META['SERVER_NAME']</span></code></a>.\nFor more on sites, see <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/sites/\"><span class=\"doc\">The “sites” framework</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code>: An alias for <code class=\"docutils literal notranslate\"><span class=\"pre\">site.domain</span></code>. If you don’t have the site\nframework installed, this will be set to the value of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">request.get_host()</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">protocol</span></code>: http or https</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">uid</span></code>: The user’s primary key encoded in base 64.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">token</span></code>: Token to check that the reset link is valid.</p></li>\n</ul>\n<p>Sample <code class=\"docutils literal notranslate\"><span class=\"pre\">registration/password_reset_email.html</span></code> (email body template):</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code>Someone asked for password reset for email <span class=\"cp\">{{</span> <span class=\"nv\">email</span> <span class=\"cp\">}}</span>. Follow the link below:\n<span class=\"cp\">{{</span> <span class=\"nv\">protocol</span><span class=\"cp\">}}</span>://<span class=\"cp\">{{</span> <span class=\"nv\">domain</span> <span class=\"cp\">}}{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;password_reset_confirm&#39;</span> <span class=\"nv\">uidb64</span><span class=\"o\">=</span><span class=\"nv\">uid</span> <span class=\"nv\">token</span><span class=\"o\">=</span><span class=\"nv\">token</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>The same template context is used for subject template. Subject must be\nsingle line plain text string.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_done\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_reset_done</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_done.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_reset_done\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The page shown after a user has been emailed a link to reset their\npassword. This view is called by default if the <a class=\"reference internal\" href=\"#django.contrib.auth.views.password_reset\" title=\"django.contrib.auth.views.password_reset\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">password_reset()</span></code></a> view\ndoesn’t have an explicit <code class=\"docutils literal notranslate\"><span class=\"pre\">post_reset_redirect</span></code> URL set.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_done</span></code></p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>If the email address provided does not exist in the system, the user is\ninactive, or has an unusable password, the user will still be\nredirected to this view but no email will be sent.</p>\n</aside>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to use.\nDefaults to <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_done.html</span></code> if not\nsupplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_confirm\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_reset_confirm</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">uidb64</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">token</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_confirm.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">token_generator</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">default_token_generator</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">set_password_form</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">SetPasswordForm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">post_reset_redirect</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_reset_confirm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Presents a form for entering a new password.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_confirm</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">uidb64</span></code>: The user’s id encoded in base 64. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">token</span></code>: Token to check that the password is valid. Defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to display the confirm\npassword view. Default value is <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_confirm.html</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">token_generator</span></code>: Instance of the class to check the password. This\nwill default to <code class=\"docutils literal notranslate\"><span class=\"pre\">default_token_generator</span></code>, it’s an instance of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.tokens.PasswordResetTokenGenerator</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">set_password_form</span></code>: Form that will be used to set the password.\nDefaults to <a class=\"reference internal\" href=\"#django.contrib.auth.forms.SetPasswordForm\" title=\"django.contrib.auth.forms.SetPasswordForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SetPasswordForm</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">post_reset_redirect</span></code>: URL to redirect after the password reset\ndone. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<p><strong>Template context:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: The form (see <code class=\"docutils literal notranslate\"><span class=\"pre\">set_password_form</span></code> above) for setting the\nnew user’s password.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">validlink</span></code>: Boolean, True if the link (combination of <code class=\"docutils literal notranslate\"><span class=\"pre\">uidb64</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">token</span></code>) is valid or unused yet.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_complete\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_reset_complete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'registration/password_reset_complete.html'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">current_app</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.password_reset_complete\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Presents a view which informs the user that the password has been\nsuccessfully changed.</p>\n<p><strong>URL name:</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_complete</span></code></p>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code>: The full name of a template to display the view.\nDefaults to <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_complete.html</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code>: A hint indicating which application contains the current\nview. See the <a class=\"reference internal\" href=\"/pt-br/1.9/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">namespaced URL resolution strategy</span></a> for more information.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code>: A dictionary of context data that will be added to the\ndefault context data passed to the template.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.9\">\n<p class=\"version-note-title\">Deprecated since Django 1.9</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.9: </span>The <code class=\"docutils literal notranslate\"><span class=\"pre\">current_app</span></code> parameter is deprecated and will be removed in\nDjango 2.0. Callers should set <code class=\"docutils literal notranslate\"><span class=\"pre\">request.current_app</span></code> instead.</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"helper-functions\">\n<h3>Helper functions<a class=\"heading-anchor\" href=\"#helper-functions\"><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.auth.views.redirect_to_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">redirect_to_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">next</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'next'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.redirect_to_login\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Redirects to the login page, and then back to another URL after a\nsuccessful login.</p>\n<p><strong>Required arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>: The URL to redirect to after a successful login.</p></li>\n</ul>\n<p><strong>Optional arguments:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</span></code>: The URL of the login page to redirect to.\nDefaults to <a class=\"reference internal\" href=\"/pt-br/1.9/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> if not supplied.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code>: The name of a <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> field containing the\nURL to redirect to after log out. Overrides <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> if the given\n<code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> parameter is passed.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n<section id=\"module-django.contrib.auth.forms\">\n<span id=\"built-in-forms\"></span><span id=\"built-in-auth-forms\"></span><h3>Built-in forms<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.forms\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you don’t want to use the built-in views, but want the convenience of not\nhaving to write forms for this functionality, the authentication system\nprovides several built-in forms located in <a class=\"reference internal\" href=\"#module-django.contrib.auth.forms\" title=\"django.contrib.auth.forms\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.forms</span></code></a>:</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>The built-in authentication forms make certain assumptions about the user\nmodel that they are working with. If you’re using a <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">custom User model</span></a>, it may be necessary to define your own forms for the\nauthentication system. For more information, refer to the documentation\nabout <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms\"><span class=\"std std-ref\">using the built-in authentication forms with custom user models</span></a>.</p>\n</aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AdminPasswordChangeForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AdminPasswordChangeForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AdminPasswordChangeForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form used in the admin interface to change a user’s password.</p>\n<p>Takes the <code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code> as the first positional argument.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AuthenticationForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AuthenticationForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AuthenticationForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form for logging a user in.</p>\n<p>Takes <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> as its first positional argument, which is stored on the\nform instance for use by sub-classes.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed\">\n<span class=\"sig-name descname\"><span class=\"pre\">confirm_login_allowed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code> rejects users whose <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code>\nflag is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. You may override this behavior with a custom\npolicy to determine which users can log in. Do this with a custom form\nthat subclasses <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code> and overrides the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">confirm_login_allowed()</span></code> method. This method should raise a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code></a> if the given user may\nnot log in.</p>\n<p>For example, to allow all users to log in regardless of “active”\nstatus:</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=\"w\"> </span><span class=\"nn\">django.contrib.auth.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AuthenticationForm</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthenticationFormWithInactiveUsersOkay</span><span class=\"p\">(</span><span class=\"n\">AuthenticationForm</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Or to allow only some active users to log in:</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\">class</span><span class=\"w\"> </span><span class=\"nc\">PickyAuthenticationForm</span><span class=\"p\">(</span><span class=\"n\">AuthenticationForm</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;This account is inactive.&quot;</span><span class=\"p\">),</span>\n                <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s1\">&#39;inactive&#39;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Sorry, accounts starting with &#39;b&#39; aren&#39;t welcome here.&quot;</span><span class=\"p\">),</span>\n                <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s1\">&#39;no_b_users&#39;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordChangeForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PasswordChangeForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordChangeForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form for allowing a user to change their password.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordResetForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PasswordResetForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordResetForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form for generating and emailing a one-time use link to reset a\nuser’s password.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordResetForm.send_email\">\n<span class=\"sig-name descname\"><span class=\"pre\">send_email</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">subject_template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">email_template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">from_email</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">to_email</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html_email_template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.PasswordResetForm.send_email\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.8\">\n<p class=\"version-note-title\">New in Django 1.8</p></aside>\n<p>Uses the arguments to send an <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailMultiAlternatives</span></code>.\nCan be overridden to customize how the email is sent to the user.</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">Parâmetros<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>subject_template_name</strong> – the template for the subject.</p></li>\n<li><p><strong>email_template_name</strong> – the template for the email body.</p></li>\n<li><p><strong>context</strong> – context passed to the <code class=\"docutils literal notranslate\"><span class=\"pre\">subject_template</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">email_template</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">html_email_template</span></code> (if it is not\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>).</p></li>\n<li><p><strong>from_email</strong> – the sender’s email.</p></li>\n<li><p><strong>to_email</strong> – the email of the requester.</p></li>\n<li><p><strong>html_email_template_name</strong> – the template for the HTML body;\ndefaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, in which case a plain text email is sent.</p></li>\n</ul>\n</dd>\n</dl>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> populates the <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> with the\nsame variables that <a class=\"reference internal\" href=\"#django.contrib.auth.views.password_reset\" title=\"django.contrib.auth.views.password_reset\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">password_reset()</span></code></a>\npasses to its email context.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.SetPasswordForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SetPasswordForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.SetPasswordForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form that lets a user change their password without entering the old\npassword.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.UserChangeForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UserChangeForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.UserChangeForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A form used in the admin interface to change a user’s information and\npermissions.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.UserCreationForm\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UserCreationForm</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.forms.UserCreationForm\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Um formulário para criar um novo usuário.</p>\n</dd></dl>\n\n</section>\n<section id=\"authentication-data-in-templates\">\n<h3>Authentication data in templates<a class=\"heading-anchor\" href=\"#authentication-data-in-templates\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The currently logged-in user and their permissions are made available in the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/\"><span class=\"doc\">template context</span></a> when you use\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a>.</p>\n<aside class=\"admonition-technicality admonition\">\n<p class=\"admonition-title\">Technicality</p>\n<p>Technically, these variables are only made available in the template\ncontext if you use <a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a> and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.auth.context_processors.auth'</span></code> context processor is\nenabled. It is in the default generated settings file. For more, see the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/#subclassing-context-requestcontext\"><span class=\"std std-ref\">RequestContext docs</span></a>.</p>\n</aside>\n<section id=\"users\">\n<h4>Usuários<a class=\"heading-anchor\" href=\"#users\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When rendering a template <a class=\"reference internal\" href=\"/pt-br/1.9/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a>, the\ncurrently logged-in user, either a  <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#id0\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a>\ninstance or an <a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnonymousUser</span></code></a> instance, is\nstored in the template variable <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">user</span> <span class=\"pre\">}}</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">user.is_authenticated</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Welcome, <span class=\"cp\">{{</span> <span class=\"nv\">user.username</span> <span class=\"cp\">}}</span>. Thanks for logging in.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>Welcome, new user. Please log in.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>This template context variable is not available if a <code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code> is not\nbeing used.</p>\n</section>\n<section id=\"permissions\">\n<h4>Permissões<a class=\"heading-anchor\" href=\"#permissions\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The currently logged-in user’s permissions are stored in the template variable\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">perms</span> <span class=\"pre\">}}</span></code>. This is an instance of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.context_processors.PermWrapper</span></code>, which is a\ntemplate-friendly proxy of permissions.</p>\n<p>In the <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">perms</span> <span class=\"pre\">}}</span></code> object, single-attribute lookup is a proxy to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.has_module_perms\" title=\"django.contrib.auth.models.User.has_module_perms\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">User.has_module_perms</span></code></a>.\nThis example would display <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the logged-in user had any permissions\nin the <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> app:</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=\"n\">perms</span><span class=\"o\">.</span><span class=\"n\">foo</span> <span class=\"p\">}}</span>\n</code></pre></div>\n<p>Two-level-attribute lookup is a proxy to\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">User.has_perm</span></code></a>. This example\nwould display <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the logged-in user had the permission\n<code class=\"docutils literal notranslate\"><span class=\"pre\">foo.can_vote</span></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=\"p\">{{</span> <span class=\"n\">perms</span><span class=\"o\">.</span><span class=\"n\">foo</span><span class=\"o\">.</span><span class=\"n\">can_vote</span> <span class=\"p\">}}</span>\n</code></pre></div>\n<p>Thus, you can check permissions in template <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">if</span> <span class=\"pre\">%}</span></code> statements:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You have permission to do something in the foo app.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.can_vote</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can vote!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.can_drive</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can drive!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You don&#39;t have permission to do anything in the foo app.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>It is possible to also look permissions up by <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">if</span> <span class=\"pre\">in</span> <span class=\"pre\">%}</span></code> statements.\nFor example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"s1\">&#39;foo&#39;</span> <span class=\"k\">in</span> <span class=\"nv\">perms</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"s1\">&#39;foo.can_vote&#39;</span> <span class=\"k\">in</span> <span class=\"nv\">perms</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>In lookup works, too.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"managing-users-in-the-admin\">\n<span id=\"auth-admin\"></span><h2>Managing users in the admin<a class=\"heading-anchor\" href=\"#managing-users-in-the-admin\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When you have both <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code>\ninstalled, the admin provides a convenient way to view and manage users,\ngroups, and permissions. Users can be created and deleted like any Django\nmodel. Groups can be created, and permissions can be assigned to users or\ngroups. A log of user edits to models made within the admin is also stored and\ndisplayed.</p>\n<section id=\"id6\">\n<h3>Criando usuários<a class=\"heading-anchor\" href=\"#id6\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>You should see a link to “Users” in the “Auth”\nsection of the main admin index page. The “Add user” admin page is different\nthan standard admin pages in that it requires you to choose a username and\npassword before allowing you to edit the rest of the user’s fields.</p>\n<p>Also note: if you want a user account to be able to create users using the\nDjango admin site, you’ll need to give them permission to add users <em>and</em>\nchange users (i.e., the “Add user” and “Change user” permissions). If an\naccount has permission to add users but not to change them, that account won’t\nbe able to add users. Why? Because if you have permission to add users, you\nhave the power to create superusers, which can then, in turn, change other\nusers. So Django requires add <em>and</em> change permissions as a slight security\nmeasure.</p>\n<p>Be thoughtful about how you allow users to manage permissions. If you give a\nnon-superuser the ability to edit users, this is ultimately the same as giving\nthem superuser status because they will be able to elevate permissions of\nusers including themselves!</p>\n</section>\n<section id=\"id7\">\n<h3>Mudando as senhas<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>User passwords are not displayed in the admin (nor stored in the database), but\nthe <a class=\"reference internal\" href=\"/pt-br/1.9/topics/auth/passwords/\"><span class=\"doc\">password storage details</span></a> are displayed.\nIncluded in the display of this information is a link to\na password change form that allows admins to change user passwords.</p>\n</section>\n</section>","rootId":"using-the-django-authentication-system","toc":[{"title":"Objetos “User”","anchor":"user-objects","children":[{"title":"Criando usuários","anchor":"creating-users","children":[]},{"title":"Criando superusuários","anchor":"creating-superusers","children":[]},{"title":"Mudando as senhas","anchor":"changing-passwords","children":[]},{"title":"Autenticando usuários","anchor":"authenticating-users","children":[]}]},{"title":"Permissões e Autorização","anchor":"permissions-and-authorization","children":[{"title":"Permissões padrão","anchor":"default-permissions","children":[]},{"title":"Grupos","anchor":"groups","children":[]},{"title":"Programaticamente criando permissões","anchor":"programmatically-creating-permissions","children":[]},{"title":"Cache de permissões","anchor":"permission-caching","children":[]}]},{"title":"Autenticação em requisições Web","anchor":"authentication-in-web-requests","children":[{"title":"Como autenticar um usuário","anchor":"how-to-log-a-user-in","children":[{"title":"Selecting the authentication backend","anchor":"selecting-the-authentication-backend","children":[]}]},{"title":"How to log a user out","anchor":"how-to-log-a-user-out","children":[]},{"title":"Limitando o acesso de usuários authenticados","anchor":"limiting-access-to-logged-in-users","children":[{"title":"The raw way","anchor":"the-raw-way","children":[]},{"title":"O login_required decorator","anchor":"the-login-required-decorator","children":[]},{"title":"O LoginRequired mixin","anchor":"the-loginrequired-mixin","children":[]},{"title":"Limiting access to logged-in users that pass a test","anchor":"limiting-access-to-logged-in-users-that-pass-a-test","children":[]},{"title":"O permission_required decorator","anchor":"the-permission-required-decorator","children":[]},{"title":"O PermissionRequiredMixin mixin","anchor":"the-permissionrequiredmixin-mixin","children":[]}]},{"title":"Redirecting unauthorized requests in class-based views","anchor":"redirecting-unauthorized-requests-in-class-based-views","children":[{"title":"Session invalidation on password change","anchor":"session-invalidation-on-password-change","children":[]}]},{"title":"Authentication Views","anchor":"module-django.contrib.auth.views","children":[{"title":"Using the views","anchor":"using-the-views","children":[]},{"title":"All authentication views","anchor":"all-authentication-views","children":[]}]},{"title":"Helper functions","anchor":"helper-functions","children":[]},{"title":"Built-in forms","anchor":"module-django.contrib.auth.forms","children":[]},{"title":"Authentication data in templates","anchor":"authentication-data-in-templates","children":[{"title":"Usuários","anchor":"users","children":[]},{"title":"Permissões","anchor":"permissions","children":[]}]}]},{"title":"Managing users in the admin","anchor":"managing-users-in-the-admin","children":[{"title":"Criando usuários","anchor":"id6","children":[]},{"title":"Mudando as senhas","anchor":"id7","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/pt-br/1.9/topics/"},{"docname":"topics/auth/index","title":"Autenticação de usuário no Django","url":"/pt-br/1.9/topics/auth/"}],"prev":{"docname":"topics/auth/index","title":"Autenticação de usuário no Django","url":"/pt-br/1.9/topics/auth/"},"next":{"docname":"topics/auth/passwords","title":"Gerenciamento de senhas no Django","url":"/pt-br/1.9/topics/auth/passwords/"},"formats":{"html":"/pt-br/1.9/topics/auth/default/","markdown":"/pt-br/1.9/topics/auth/default.md","json":"/pt-br/1.9/topics/auth/default.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/topics/auth/default.txt","official":"https://docs.djangoproject.com/pt-br/1.9/topics/auth/default/","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"]}