{"title":"Djangoの認証システムを使用する","version":"1.10","locale":"ja","docname":"topics/auth/default","url":"/ja/1.10/topics/auth/default/","canonical":"https://djangodocs.dev/ja/1.10/topics/auth/default/","summary":"このドキュメントでは、デフォルト設定でのDjangoの認証システムの使用方法を説明します。この設定は、タスクの適切な範囲を管理することで、最も一般的なプロジェクトのニーズにかなうよう徐々に発展してきました。そして、パスワードや権限の入念な実装を持っています。デフォルトの認証システムからの変更が必要なプロジェクトのために、Djan…","html":"<h1>Djangoの認証システムを使用する<a class=\"heading-anchor\" href=\"#using-the-django-authentication-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントでは、デフォルト設定でのDjangoの認証システムの使用方法を説明します。この設定は、タスクの適切な範囲を管理することで、最も一般的なプロジェクトのニーズにかなうよう徐々に発展してきました。そして、パスワードや権限の入念な実装を持っています。デフォルトの認証システムからの変更が必要なプロジェクトのために、Djangoは認証システムの広範囲の <a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/\"><span class=\"doc\">拡張とカスタマイズ</span></a> をサポートします。</p>\n<p>Djangoの認証は、認証機能と権限機能の両方を共に提供しています。そして、一般的に、これらの機能を合わせて認証システムと呼びます。</p>\n<section id=\"user-objects\">\n<span id=\"id1\"></span><h2><code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> オブジェクト<a class=\"heading-anchor\" href=\"#user-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> オブジェクトは、認証システムの中核です。一般的に、このオブジェクトはあなたのサイトに関係する人々を表し、アクセスを制限すること、ユーザ情報を登録すること、コンテンツを作成者と関連付けることを可能にする際などに利用されます。\nDjangoの認証フレームワークにはUserクラスという、ただひとつのクラスのみが存在します。すなわち、 <a class=\"reference internal\" href=\"/ja/1.10/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> または admin <a class=\"reference internal\" href=\"/ja/1.10/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> ユーザは、Userオブジェクトと異なるクラスではなく、特別な属性セットを持ったUserオブジェクトなのです。</p>\n<p>デフォルトのユーザの主要な属性は次のとおりです。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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>仕様については <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">full</span> <span class=\"pre\">API</span> <span class=\"pre\">documentation</span></code></a> を参照してください。 次のドキュメントは、よりタスク指向の形式となっています。</p>\n<section id=\"creating-users\">\n<span id=\"topics-auth-creating-users\"></span><h3>ユーザを作成する<a class=\"heading-anchor\" href=\"#creating-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ユーザを作成するための最も直接的な方法は、組み込まれている <a class=\"reference internal\" href=\"/ja/1.10/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> というヘルパー関数を利用することです。</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>すでにDjango adminをインストールしている場合は、 <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">インタラクティブにユーザを作成する</span></a> こともできます。</p>\n</section>\n<section id=\"creating-superusers\">\n<span id=\"topics-auth-creating-superusers\"></span><h3>スーパーユーザを作成する<a class=\"heading-anchor\" href=\"#creating-superusers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Create superusers using the <a class=\"reference internal\" href=\"/ja/1.10/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></code></a> command:</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>パスワードを入力するように促されます。入力後、ただちにユーザが作成されます。 <a class=\"reference internal\" href=\"/ja/1.10/ref/django-admin/#cmdoption-createsuperuser-username\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--username</span></code></a> または <a class=\"reference internal\" href=\"/ja/1.10/ref/django-admin/#cmdoption-createsuperuser-email\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--email</span></code></a> オプションを使用しなければ、これらの値を入力するように促されます。</p>\n</section>\n<section id=\"changing-passwords\">\n<h3>パスワードを変更する<a class=\"heading-anchor\" href=\"#changing-passwords\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Djangoはユーザモデルに未加工の(はっきりとしたテキストの)パスワードは保存せず、ハッシュ値でのみ保存します( 詳細は、 <a class=\"reference internal\" href=\"/ja/1.10/topics/auth/passwords/\"><span class=\"doc\">パスワードは管理方法に関するドキュメント</span></a> を参照してください)。これにより、パスワード属性を使用されません。これが、ユーザを作成する際にヘルパー関数を使用する理由です。</p>\n<p>ユーザのパスワードを変更するには、いくつかのオプションがあります。</p>\n<p><a class=\"reference internal\" href=\"/ja/1.10/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> offers a method\nof changing a user's password from the command line. It prompts you to\nchange the password of a given user which you must enter twice. If\nthey both match, the new password will be changed immediately. If you\ndo not supply a user, the command will attempt to change the password\nwhose username matches the current system user.</p>\n<p><a class=\"reference internal\" href=\"/ja/1.10/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>Django admin がインストールされていれば、 <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">認証システムのadminページ</span></a> にて、ユーザのパスワードを変更することも可能です。</p>\n<p>また、Djangoはユーザ自身のパスワードを変更するための <a class=\"reference internal\" href=\"#built-in-auth-views\"><span class=\"std std-ref\">ビュー</span></a> と <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">フォーム</span></a> を提供します。</p>\n<p>ユーザーのパスワード変更を行う事とそのユーザーのセッションは全てログアウトされます。詳細は <a class=\"reference internal\" href=\"#session-invalidation-on-password-change\"><span class=\"std std-ref\">Session invalidation on password change</span></a> を参照してください。</p>\n</section>\n<section id=\"authenticating-users\">\n<h3>ユーザを認証する<a class=\"heading-anchor\" href=\"#authenticating-users\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>認証情報のセットを検証するには <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> を利用してください。このメソッドは認証情報をキーワード引数として受け取ります。検証する対象はデフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">password</span></code> であり、その組み合わせを個々の <a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">認証バックエンド</span></a> に対して問い合わせ、認証バックエンドで認証情報が有効とされれば <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> オブジェクトを返します。もしいずれの認証バックエンドでも認証情報が有効と判定されなければ <a class=\"reference internal\" href=\"/ja/1.10/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> が送出され、<code class=\"docutils literal notranslate\"><span class=\"pre\">None</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</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\"># A backend authenticated the credentials</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"c1\"># No backend authenticated the credentials</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>これは、一連の資格情報を認証するための低レベルの方法です。例えば、 <a class=\"reference internal\" href=\"/ja/1.10/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> でこの方法使われます。独自の認証システムを書いていない限り、あなたはおそらくこれを使用しません。あなたはログインユーザへのアクセスを制限する方法を探しているというならば、 <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> デコレータを参照してください。</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"permissions-and-authorization\">\n<span id=\"topic-authorization\"></span><h2>権限と認可<a class=\"heading-anchor\" href=\"#permissions-and-authorization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Djangoにはシンプルな権限システムが付属しています。これにより、特定のユーザーおよびユーザのグループに権限を割り当てるための方法を提供します。</p>\n<p>これは、Djangoのadminサイトでも使われていますが、独自のコード内でも自由に使えます。</p>\n<p>Djangoのadminサイトは、次のように権限を使用します：</p>\n<ul class=\"simple\">\n<li><p>&quot;追加&quot;フォームのビューにアクセスし、オブジェクトの追加をすることは、そのオブジェクトの型への&quot;追加&quot;権限を持つユーザに限定されています。</p></li>\n<li><p>変更リストを表示し、&quot;変更&quot;フォームを表示し、オブジェクトを変更することは、そのオブジェクトの型への&quot;変更&quot;権限を持つユーザーに限定されています。</p></li>\n<li><p>オブジェクトを削除することは、そのオブジェクトの型への&quot;削除&quot;権限を持つユーザに限定されています。</p></li>\n</ul>\n<p>権限はオブジェクトの型に対してだけでなく、特定のオブジェクトのインスタンスに対しても同様に割り当てる事ができます。<a class=\"reference internal\" href=\"/ja/1.10/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> クラスで提供されている  <a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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> および <a class=\"reference internal\" href=\"/ja/1.10/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> のメソッドを利用する事で、同じ型であっても異なったオブジェクトのインスタンスに対し付与する権限のカスタマイズが可能となります。</p>\n<p><a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> オブジェクトは 2 つの多対多のフィールド、<code class=\"docutils literal notranslate\"><span class=\"pre\">groups</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">user_permissions</span></code> を持っています。他の <a class=\"reference internal\" href=\"/ja/1.10/topics/db/models/\"><span class=\"doc\">Django におけるモデル</span></a> で行えるのと同様に <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</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=\"n\">myuser</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">set</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=\"n\">set</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>デフォルトの権限<a class=\"heading-anchor\" href=\"#default-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> が <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 内に設定されている場合、追加、変更および削除の 3 つの権限が定義され、これらはインストールされたアプリケーション単体に定義されている Django モデルそれぞれに対して作成されます。</p>\n<p>これらの権限は <a class=\"reference internal\" href=\"/ja/1.10/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> 実行時に作成されます。<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> を追加後初めての <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></code> を実行した場合は、新たにインストールされるモデルに対してと同様、それまでに作成されたモデルに対してもデフォルトの権限が作成されます。以後 <a class=\"reference internal\" href=\"/ja/1.10/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> (この権限を作成する関数は <a class=\"reference internal\" href=\"/ja/1.10/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> シグナルに接続されています)を実行する度作成されるモデルに対してデフォルトの権限が作成されます。</p>\n<p><a class=\"reference internal\" href=\"/ja/1.10/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> でモデルが <code class=\"docutils literal notranslate\"><span class=\"pre\">Bar</span></code> であるアプリケーションを想定し、デフォルトの権限を試すには以下を利用する必要が有ります:</p>\n<ul class=\"simple\">\n<li><p>追加: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.add_bar')</span></code></p></li>\n<li><p>変更: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.change_bar')</span></code></p></li>\n<li><p>削除: <code class=\"docutils literal notranslate\"><span class=\"pre\">user.has_perm('foo.delete_bar')</span></code></p></li>\n</ul>\n<p><a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id3\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Permission</span></code></a> モデルに対して直接アクセスする事はほぼ有りません。</p>\n</section>\n<section id=\"groups\">\n<h3>グループ<a class=\"heading-anchor\" href=\"#groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id6\" 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> モデルはユーザーを分類する一般的な方法で、対象となるユーザーに権限や、何らかの分類名を付けることが可能となります。個々のユーザーは複数のグループに属する事ができます。</p>\n<p>グループに属するユーザーは、そのグループに対して許可されている権限を自動的に持つ事になります。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">Site</span> <span class=\"pre\">editors</span></code> グループが <code class=\"docutils literal notranslate\"><span class=\"pre\">can_edit_home_page</span></code> 権限を持っていた場合、そのグループに属する全てのユーザーはその権限を持つ事になります。</p>\n<p>権限の管理に限らず、グループはユーザーに何らかの分類名や、拡張された機能を付与する上で有用です。例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">Special</span> <span class=\"pre\">users</span></code> というグループを作成して、そのグループのメンバーに対してサイトのメンバー限定の領域にアクセスする権限を付与したり、メンバー限定のメールを送るコードを書いたりする事も可能なのです。</p>\n</section>\n<section id=\"programmatically-creating-permissions\">\n<h3>プログラムによる権限作成<a class=\"heading-anchor\" href=\"#programmatically-creating-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/#custom-permissions\"><span class=\"std std-ref\">カスタム権限</span></a> はモデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> クラス内に定義され、直接作成する事も可能です。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">myapp</span></code> 内の <code class=\"docutils literal notranslate\"><span class=\"pre\">BlogPost</span></code> モデルに対する権限 <code class=\"docutils literal notranslate\"><span class=\"pre\">can_publish</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>この権限は <code class=\"docutils literal notranslate\"><span class=\"pre\">user_permissions</span></code> 属性を介して <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> に、あるいは <code class=\"docutils literal notranslate\"><span class=\"pre\">permissions</span></code> 属性を介して <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id6\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Group</span></code></a> に割り当てられます。</p>\n</section>\n<section id=\"permission-caching\">\n<h3>権限のキャッシュ<a class=\"heading-anchor\" href=\"#permission-caching\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/1.10/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> はユーザーオブジェクトが権限の確認のため最初に要求した情報をキャッシュします。この仕組みはリクエスト-レスポンスのサイクルの中では(例えば管理機能によって)通常の場合、権限が付与されてから直ちに権限の確認が生じる事が無いため大抵の場合問題がありません。もし権限を付与した後直ちに権限の確認を行う場合、テストあるいは認証をビューで例示する場合等、最も簡単な解決手段はデータベースから再度ユーザーの情報を取得する事です。以下は実装例です:</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>Web のリクエストにおける認証<a class=\"heading-anchor\" href=\"#authentication-in-web-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django は <a class=\"reference internal\" href=\"/ja/1.10/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">リクエストオブジェクト</span></code></a> に対して認証システムを接続させるのに <a class=\"reference internal\" href=\"/ja/1.10/topics/http/sessions/\"><span class=\"doc\">セッション</span></a> とミドルウェアを利用します。</p>\n<p>それらは現在のユーザーを示す <a class=\"reference internal\" href=\"/ja/1.10/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> 属性を付与します。もしユーザーが現在ログインしていない場合、この属性には <a class=\"reference internal\" href=\"/ja/1.10/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> のインスタンスが、ログインしている場合は <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" 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>この二者は <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_authenticated</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=\"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>ユーザーをログインさせるには<a class=\"heading-anchor\" href=\"#how-to-log-a-user-in\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>現在のセッションにおいて認証を有効としたいユーザーがいる場合 - <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>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">backend</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.login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>あるユーザーをログインさせる場合は、<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> を利用してください。この関数は <a class=\"reference internal\" href=\"/ja/1.10/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> オブジェクトと <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> オブジェクトを受け取ります。<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> は Django のセッションフレームワークを利用して、ユーザーのセッション中での ID を保持します。</p>\n<p>匿名ユーザーとしてのセッション中にセットされたデータが、ログイン後も継続して利用できる事に注意してください。</p>\n<p>以下の例では <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> および <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=\"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=\"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<aside class=\"version-note version-changed\" data-version=\"1.10\">\n<p class=\"version-note-title\">Changed in Django 1.10</p><p>従来のバージョンでは、手動でユーザーをログインさせる場合、<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> を呼び出す前に <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> を用いたユーザーの認証に <em>成功していなければ</em> なりませんでした。現在のバージョンでは引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> を用いて認証バックエンドを指定する事ができます。</p>\n</aside>\n</dd></dl>\n\n<section id=\"selecting-the-authentication-backend\">\n<h4>認証バックエンドの選択<a class=\"heading-anchor\" href=\"#selecting-the-authentication-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ユーザーがログインする際、そのユーザーの ID と認証時に用いた認証バックエンドはセッション中保持されます。その仕組みによって、ユーザーの詳細情報を取得するリクエストが発生した場合に同じ <a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">認証バックエンド</span></a> を利用できます。セッション中に保持される認証バックエンドは下記の手順を経て選択されます:</p>\n<ol class=\"arabic simple\">\n<li><p>省略可能な <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> 引数が与えられている場合は利用します。</p></li>\n<li><p>存在すれば属性 <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code> の値を利用する。<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> は返すユーザーオブジェクトに属性値 <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code> を付与するので、<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> と <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></li>\n<li><p>ただ一つだけ設定が存在すれば <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a> の <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> を利用する。</p></li>\n<li><p>いずれにも該当しなかった場合、例外が送出される。</p></li>\n</ol>\n<p>1 もしくは 2 においては、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code> あるいは属性値 <code class=\"docutils literal notranslate\"><span class=\"pre\">user.backend</span></code> は(<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a> で定義されているのと同様に)ドット付きのインポート先を示すパスの文字列でなければなりません。</p>\n</section>\n</section>\n<section id=\"how-to-log-a-user-out\">\n<h3>ユーザーをログアウトさせるには<a class=\"heading-anchor\" href=\"#how-to-log-a-user-out\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><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> を利用してログインしたユーザーをログアウトさせるためには、<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> をビューの中で利用してください。この関数は <a class=\"reference internal\" href=\"/ja/1.10/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>\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><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> は対象となるユーザーが最初からログインしていなかった場合でも例外を送出しない事に注意してください。</p>\n<p><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> を呼びだすと、現在処理しているリクエストに対応したセッション情報は完全に破棄されます。その時点までに存在している全てのデータが削除されます。これは別の人物が同じ Web ブラウザを利用してログインし、前のユーザーのセッションにアクセスして使用してしまう事態を防ぐためです。ログアウトした直後から利用できる何らかの情報をセッションに保存したい場合は、<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>ログインしているユーザーにアクセスを制限する<a class=\"heading-anchor\" href=\"#limiting-access-to-logged-in-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-raw-way\">\n<h4>原理的な方法<a class=\"heading-anchor\" href=\"#the-raw-way\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ページに対するアクセスを制限する原理的な方法は <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated\" title=\"django.contrib.auth.models.User.is_authenticated\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.user.is_authenticated</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.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>もしくはエラーメッセージを出力します。</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><code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> デコレータ<a class=\"heading-anchor\" href=\"#the-login-required-decorator\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><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> デコレータを利用できます:</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> は下記の処理を行います:</p>\n<ul class=\"simple\">\n<li><p>もしユーザがログインしていなければ、<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> にリダイレクトし、クエリ文字列に現在の絶対パスを渡します。リダイレクト先の例: <code class=\"docutils literal notranslate\"><span class=\"pre\">/accounts/login/?next=/polls/3/</span></code></p></li>\n<li><p>もしユーザがログインしていれば、通常通りビューを処理します。ビューのコードの中ではユーザがログインしているかを意識しなくて良いのです。</p></li>\n</ul>\n<p>デフォルトでは、認証に成功したユーザがリダイレクトされる先のパスは <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;next&quot;</span></code> という名称のクエリパラメータに格納されています。もし異なるパラメータ名を利用したい場合、<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> が <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</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\">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><code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> に値を持たせた場合、ログインテンプレートもカスタマイズする必要があるでしょう。これは、リダイレクト先のパスを格納しているテンプレートコンテキスト変数が、キーとして (デフォルトの) <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;next&quot;</span></code> でなく <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code> の値を使用してしまうためです。</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> はまた省略可能な引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">login_url</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\">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><code class=\"docutils literal notranslate\"><span class=\"pre\">`login_url`</span></code> のパラメータを定義しない場合、<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> が設定されかつログイン用ビューが適切に配置されている必要が有ります。例えば、デフォルトの設定を利用して下記の内容を 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><a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGIN_URL</span></code></a> はまたビュー関数名と <a class=\"reference internal\" href=\"/ja/1.10/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">命名された URL パターン</span></a> を受け付けます。この仕組みによって設定を更新することなく URLconf 内のログイン用ビューを再配置する事ができます。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">login_required</span></code> デコレータはユーザーのフラグ <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> をチェックしませんが、デフォルトの <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a> はアクティブでないユーザを拒否します。</p>\n</aside>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>もし Django の管理画面にカスタマイズしたビューを実装している(あるいはビルトインのビューが利用しているのと同じ認証チェックが必要である)場合は、<a class=\"reference internal\" href=\"/ja/1.10/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> デコレータが <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>The <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 to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When using <a class=\"reference internal\" href=\"/ja/1.10/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 to this definition</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\">注釈</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, but the default\n<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a> reject inactive users.</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 to this heading</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=\"/ja/1.10/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 to this definition</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=\"/ja/1.10/ref/contrib/auth/#id1\" 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=\"/ja/1.10/ref/contrib/auth/#id1\" 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=\"/ja/1.10/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 &quot;next page&quot;.</p>\n</dd>\n</dl>\n<p>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=\"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 to this definition</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=\"/ja/1.10/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 to this definition</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 to this definition</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>The <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 to this heading</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 to this definition</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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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>The <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 to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>To apply permission checks to <a class=\"reference internal\" href=\"/ja/1.10/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 to this definition</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 to this definition</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 to this definition</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=\"/ja/1.10/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 to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To ease the handling of access restrictions in <a class=\"reference internal\" href=\"/ja/1.10/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 to this definition</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 to this definition</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=\"/ja/1.10/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 to this definition</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 to this definition</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 to this definition</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=\"/ja/1.10/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 to this definition</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=\"/ja/1.10/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 to this definition</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 to this definition</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 to this definition</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=\"/ja/1.10/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 to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-changed\" data-version=\"1.10\">\n<p class=\"version-note-title\">Changed in Django 1.10</p><p>Session verification is enabled and mandatory in Django 1.10 (there's no\nway to disable it) regardless of whether or not\n<code class=\"docutils literal notranslate\"><span class=\"pre\">SessionAuthenticationMiddleware</span></code> is enabled. In older\nversions, this protection only applies if\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.middleware.SessionAuthenticationMiddleware</span></code>\nis enabled in <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a>.</p>\n</aside>\n<p>If your <a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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. Django verifies that the hash in the session for\neach request matches the one that's computed during the request. This allows a\nuser to log out all of their sessions 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\">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=\"/ja/1.10/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 the <a class=\"reference internal\" href=\"#django.contrib.auth.update_session_auth_hash\" title=\"django.contrib.auth.update_session_auth_hash\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">update_session_auth_hash()</span></code></a>\nfunction. In this case, however, if a user also wants to invalidate the session\nfrom which they're changing their password (for example, if they believe the\nsession cookie on their machine was stolen), then they also need to log out\nthat session.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.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.update_session_auth_hash\"><span class=\"visually-hidden\">Link to this definition</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<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Since\n<a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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 to this heading</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 to this heading</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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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 to this heading</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>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_authenticated_user=False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.login\"><span class=\"visually-hidden\">Link to this definition</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=\"/ja/1.10/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>\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=\"/ja/1.10/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\">redirect_authenticated_user</span></code>: A boolean that controls whether or not\nauthenticated users accessing the login page will be redirected as if\nthey had just successfully logged in. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>If you enable <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_authenticated_user</span></code>, other websites will be\nable to determine if their visitors are authenticated on your site by\nrequesting redirect URLs to image files on your website. To avoid\nthis &quot;<a class=\"reference external\" href=\"https://robinlinus.github.io/socialmedia-leak/\">social media fingerprinting</a>&quot; information\nleakage, host all images and your favicon on a separate domain.</p>\n</aside>\n</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\">バージョン 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.10\">\n<p class=\"version-note-title\">New in Django 1.10</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_authenticated_user</span></code> parameter was added.</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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; 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=\"/ja/1.10/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 to this definition</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. Defaults to\n<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-LOGOUT_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">settings.LOGOUT_REDIRECT_URL</span></code></a> if not\nsupplied.</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=\"/ja/1.10/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\">バージョン 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 &quot;Logged out&quot;, localized.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code>: The current <a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/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=\"/ja/1.10/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; framework</span></a>.</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 to this definition</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=\"/ja/1.10/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=\"/ja/1.10/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\">バージョン 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 to this definition</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 &quot;change password&quot; 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=\"/ja/1.10/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\">バージョン 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 to this definition</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=\"/ja/1.10/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\">バージョン 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\">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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>パスワードをリセットするために使われる 1 回限り有効なリンクを生成し、ユーザがパスワードをリセットできるようにします。そのリンクはユーザーが登録した E メールアドレスに送信されます。</p>\n<p>システムに E メールアドレスが登録されていない場合、E メールは送信されませんが、ユーザはエラーメッセージを受け取りません。これは、情報が悪意を持った攻撃者に流出するのを防ぐためです。エラーメッセージを提供するように変更したいときは、<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> をサブクラス化して、<code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code> 引数を使用してください。</p>\n<p>無効なパスワード (詳しくは <a class=\"reference internal\" href=\"/ja/1.10/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> ) でフラグが立てられたユーザは、パスワードリセットのリクエストができないようになっており、LDAP のような外部の認証ソースを使っているときに悪用されるのを防ぎます。アカウントの存在が漏洩しないように、ユーザーはエラーメッセージを受け取ることもメールが送信されることもありません。</p>\n<p><strong>URL 名:</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>: パスワードリセットのフォームを表示するためのテンプレート名です。指定しない場合のデフォルトは <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_form.html</span></code> です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">email_template_name</span></code>: リセットパスワードのリンクとともに生成される E メールを生成するためのテンプレート名です。指定しない場合のデフォルトは <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_email.html</span></code> です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">subject_template_name</span></code>: リセットパスワードのリンクとともに生成される E メールの表題に対して使われるテンプレートの名前です。指定しない場合のデフォルトは <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_subject.txt</span></code> です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code>: ユーザーがパスワードをリセットするために E メールを受け取るために使われるフォームです。デフォルトは <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>: 1 回限りのリンクをチェックするためのクラスのインスタンスです。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">default_token_generator</span></code> で、これは <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>: パスワードリセットのリクエストが成功した後のリダイレクト先の URL です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">from_email</span></code>: 検証済みの E メールアドレスです。デフォルトでは、Django は <a class=\"reference internal\" href=\"/ja/1.10/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=\"/ja/1.10/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>: パスワードリセットのリンクとともに送信される <code class=\"docutils literal notranslate\"><span class=\"pre\">text/html</span></code> のマルチパートの E メールを生成するためのテンプレートの名前です。デフォルトでは、HTML メールは送信されません。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_email_context</span></code>: E メールテンプレート内で使われるコンテキストデータのディクショナリです。</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\">バージョン 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><code class=\"docutils literal notranslate\"><span class=\"pre\">extra_email_context</span></code> パラメータが追加されました。</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>: ユーザーのパスワードをリセットするためのフォームです (詳細は上述の <code class=\"docutils literal notranslate\"><span class=\"pre\">password_reset_form</span></code>)。</p></li>\n</ul>\n<p><strong>E メールテンプレートのコンテキスト:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code>: <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>: 現在の <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> で、<code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> フォームフィールドから取得されます。アクティブなユーザ (<code class=\"docutils literal notranslate\"><span class=\"pre\">User.is_active</span> <span class=\"pre\">が</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=\"/ja/1.10/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=\"/ja/1.10/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; framework</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">site.domain</span></code> の別名 (エイリアス) です。サイトのフレームワークをインストールしていない場合、<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 か https です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">uid</span></code>: Base 64 でエンコードされたユーザのプライマリキーです。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">token</span></code>: リセットリンクを検証するためのトークンです。</p></li>\n</ul>\n<p>以下はサンプルの <code class=\"docutils literal notranslate\"><span class=\"pre\">registration/password_reset_email.html</span></code> (E メール本文のテンプレート)です:</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>表題のテンプレートにも同じテンプレートコンテキストが使われます。表題は 1 行のプレーンテキスト文字列の必要があります。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>パスワードリセットのためのリンクが E メール送信された後にユーザに表示されるページです。デフォルトでは、<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> ビューに明示的に <code class=\"docutils literal notranslate\"><span class=\"pre\">post_reset_redirect</span></code> URL セットがない場合に呼ばれます。</p>\n<p><strong>URL 名:</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\">注釈</p>\n<p>提供された E メールアドレスがシステムにない、ユーザーが非アクティブである、もしくは無効なパスワードの場合でも、ユーザはこのページにリダイレクトされますが、E メールは送信されません。</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>: テンプレートの名前です。指定しない場合のデフォルトは <code class=\"file docutils literal notranslate\"><span class=\"pre\">registration/password_reset_done.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=\"/ja/1.10/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\">バージョン 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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>新しいパスワードを入力するためのフォームを提供します。</p>\n<p><strong>URL 名:</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>: Base 64 でエンコードされたユーザの ID です。デフォルトは <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>: パスワードが有効かを確認するためのトークンです。デフォルトは <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>: パスワード確認のビューをを表示するためのテンプレートの名前です。デフォルト値は <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>: パスワードをチェックするためのクラスのインスタンスです。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">default_token_generator``で、これは</span> <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>: パスワードをセットするために使われるフォームです。デフォルトは <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です。デフォルトは <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=\"/ja/1.10/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>: 新しいユーザーのパスワードをセットするためのフォーム (詳しくは上述の <code class=\"docutils literal notranslate\"><span class=\"pre\">set_password_form</span></code>) です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">validlink</span></code>: 真偽値で、リンク (<code class=\"docutils literal notranslate\"><span class=\"pre\">uidb64</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">token</span></code> の組み合わせ) が有効か、まだ使われていない場合に True となります。</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\">バージョン 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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>パスワードの変更が成功したことをユーザに知らせるためのビューを提供します。</p>\n<p><strong>URL 名:</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>: ビューを表示するためのテンプレートの名前です。デフォルトは <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=\"/ja/1.10/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\">バージョン 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>ヘルパー関数<a class=\"heading-anchor\" href=\"#helper-functions\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ログインページにリダイレクトし、ログイン成功後にもう 1 つの URL に戻ります。</p>\n<p><strong>必須の引数:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>: ログイン成功後のリダイレクト先の URL です。</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=\"/ja/1.10/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>: ログアウト後のリダイレクト先の URL を含む <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> フィールドの名前です。指定された <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> パラメータが与えられ場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> をオーバーライドします。</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>ビルトインのフォーム<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ビルトインのビューを使いたくないけれども、ビューの機能を再利用したいと考えている場合、認証システムが提供しているビルトインのフォームを使うことができます。ビルトインのフォームは <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\">注釈</p>\n<p>ビルトインの認証フォームは、扱うユーザーモデルについて一定の前提に基づいて設計されています。なので、もし <a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">独自のユーザーモデル</span></a> を使っている場合は、 認証システムに対して自分自身のフォームを定義する必要がある可能性があります。詳しくは、<a class=\"reference internal\" href=\"/ja/1.10/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms\"><span class=\"std std-ref\">独自のユーザーモデルでビルトインの認証フォームを使用する</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ユーザのパスワードを変更するために admin インターフェイス内で使われるフォームです。</p>\n<p>第 1 引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code> を取ります。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ユーザーログインのためのフォームです。</p>\n<p>第 1 引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> を取り、サブクラスで使えるようにフォームのインスタンス上に保持されます。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> フラグが <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> にセットされたユーザを拒否します。どのユーザがログインできるかを決定する独自のポリシーによって、この挙動をオーバーライドできます。<code class=\"docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code> をサブクラス化した独自のフォームを使って、<code class=\"docutils literal notranslate\"><span class=\"pre\">confirm_login_allowed()</span></code> メソッドを上書きしてください。指定されたユーザがログインできない場合、このメソッドは <a class=\"reference internal\" href=\"/ja/1.10/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> を投げます。</p>\n<p>例えば、&quot;active&quot; ステータスにかかわらず全てのユーザにログインを許可するには:</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>(この例では、非アクティブのユーザを許可する認証バックエンドの使用も必要となります。たとえば <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersModelBackend\" title=\"django.contrib.auth.backends.AllowAllUsersModelBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AllowAllUsersModelBackend</span></code></a> などです。)</p>\n<p>または、何人かのアクティブユーザのみにログインを許可するには、以下のようにします:</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ユーザがパスワードを変更できるようにするフォームです。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ユーザのパスワードリセットするための 1 回限りのリンクを生成して E メール送信するためのフォームです。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.PasswordResetForm.send_mail\">\n<span class=\"sig-name descname\"><span class=\"pre\">send_mail</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_mail\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>引数を使って <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailMultiAlternatives</span></code> を送信します。オーバーライドして、どのように E メールが送信されるかカスタマイズできます。</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">パラメータ<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>subject_template_name</strong> -- 表題用のテンプレートです。</p></li>\n<li><p><strong>email_template_name</strong> -- E メール本文用のテンプレートです。</p></li>\n<li><p><strong>context</strong> -- <code class=\"docutils literal notranslate\"><span class=\"pre\">subject_template</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">email_template</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">html_email_template</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> ではない場合のみ) に渡されるコンテキストです。</p></li>\n<li><p><strong>from_email</strong> -- 送信者の E メールです。</p></li>\n<li><p><strong>to_email</strong> -- リクエストしてきたユーザの E メールです。</p></li>\n<li><p><strong>html_email_template_name</strong> -- HTML 本文用のテンプレートです; デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> で、この場合プレーンテキストの E メールが送信されます。</p></li>\n</ul>\n</dd>\n</dl>\n<p>デフォルトでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> に 変数を格納します。この変数は <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> が E メールのコンテキストに渡す変数と同じです。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>古いパスワードを入力しないでパスワードを変更できるようにするフォームです。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ユーザの情報とパーミッションを変更するために admin インターフェイスで使われるフォームです。</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>新しいユーザを作成するための <a class=\"reference internal\" href=\"/ja/1.10/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> です。</p>\n<p>3 つのフィールドがあります: <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code> (ユーザモデルより)、<code class=\"docutils literal notranslate\"><span class=\"pre\">password1</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">password2``です。``password1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">password2</span></code> が一致するか確認し、<a class=\"reference internal\" href=\"/ja/1.10/topics/auth/passwords/#django.contrib.auth.password_validation.validate_password\" title=\"django.contrib.auth.password_validation.validate_password\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">validate_password()</span></code></a> を使ってパスワードを検証します。そして、<a class=\"reference internal\" href=\"/ja/1.10/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</dd></dl>\n\n</section>\n<section id=\"authentication-data-in-templates\">\n<h3>テンプレート内の認証データ<a class=\"heading-anchor\" href=\"#authentication-data-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/1.10/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> を使うと、現在ログインしているユーザとパーミッションを <a class=\"reference internal\" href=\"/ja/1.10/ref/templates/api/\"><span class=\"doc\">template context</span></a> 内で使えるようにできます。</p>\n<aside class=\"admonition-technicality admonition\">\n<p class=\"admonition-title\">技術的には</p>\n<p>技術的には、これらの変数は <a class=\"reference internal\" href=\"/ja/1.10/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> を使い、<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.auth.context_processors.auth'</span></code> コンテキストプロセッサを有効にしたときのみ使うことができます。これは、デフォルトで生成される設定ファイル内にあります。より詳しくは <a class=\"reference internal\" href=\"/ja/1.10/ref/templates/api/#subclassing-context-requestcontext\"><span class=\"std std-ref\">RequestContext docs</span></a> を参照してください。</p>\n</aside>\n<section id=\"users\">\n<h4>ユーザ<a class=\"heading-anchor\" href=\"#users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>テンプレート <a class=\"reference internal\" href=\"/ja/1.10/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> をレンダリングするとき、現在ログイン中のユーザ (<a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/auth/#id1\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a> インスタンスか <a class=\"reference internal\" href=\"/ja/1.10/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> のどちらか) はテンプレート変数 <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><code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code> が使用されていない場合、このテンプレートコンテキスト変数は無効となります。</p>\n</section>\n<section id=\"permissions\">\n<h4>パーミッション<a class=\"heading-anchor\" href=\"#permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>現在ログイン中のユーザのパーミッションは、テンプレート変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">perms</span> <span class=\"pre\">}}</span></code> 内に保持されています。 これは <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.context_processors.PermWrapper</span></code> のインスタンスで、パーミッションをテンプレートで使いやすくするための代替表現です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">perms</span> <span class=\"pre\">}}</span></code> オブジェクトでは、単一属性のルックアップは <a class=\"reference internal\" href=\"/ja/1.10/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> の代替表現です。以下の例では、ログイン中のユーザが <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> アプリケーションにおいて何かしらのパーミッションを有する場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</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=\"p\">}}</span>\n</code></pre></div>\n<p>2 段階の属性のルックアップは <a class=\"reference internal\" href=\"/ja/1.10/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> の代替表現です。以下の例は、ログイン中のユーザがユーザがパーミッション <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.can_vote</span></code> を有する場合に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</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>したがって、テンプレート内の <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">if</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\">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><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">if</span> <span class=\"pre\">in</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=\"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>admin 内でユーザを管理する<a class=\"heading-anchor\" href=\"#managing-users-in-the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> の両方をインストールしていれば、admin でユーザ、グループおよびパーミッションを見たり管理することが簡単にできます。ユーザは通常の Django モデルと同じく作成や削除ができます。グループも作成することができ、パーミッションはユーザやグループにアサインすることができます。admin でのユーザー編集のログも保管および表示されます。</p>\n<section id=\"id6\">\n<h3>ユーザを作成する<a class=\"heading-anchor\" href=\"#id6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>admin のメインインデックスページの &quot;Auth&quot; セクションに &quot;Users&quot; へのリンクがあります。&quot;Add user&quot; ページは通常の admin ページとは異なり、他のユーザーのフィールドを編集する際に、ユーザ名とパスワードを選択する必要があります。</p>\n<p>また、Django の admin サイトを使用してユーザアカウントを作成できるようにするには、ユーザを追加 <em>および</em> 変更する権限をユーザに与える必要があります (つまり &quot;Add user&quot; と &quot;Change user&quot; パーミッション)。あるアカウントにユーザの追加権限のみが与えられ変更権限がない場合、そのアカウントはユーザを追加できません。なぜなら、追加権限によってスーパーユーザを作成することができ、そのスーパーユーザを使って他のユーザーを変更することができてしまうからです。 そのため、Django はちょっとしたセキュリティ対策として、追加と変更の <em>両方</em> の権限を必要とするのです。</p>\n<p>ユーザに与えるパーミッション管理の権限については、よく考える必要があります。たとえば非スーパーユーザにユーザ編集の権限を与えてしまうと、結果的に彼らにスーパーユーザと同じ能力を与えることになります。というのも、彼らはユーザ編集の権限によってユーザのパーミッションを昇格させることができるため、彼ら自身のパーミッションも昇格させられるのです！</p>\n</section>\n<section id=\"id7\">\n<h3>パスワードを変更する<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</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=\"/ja/1.10/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":"User オブジェクト","anchor":"user-objects","children":[{"title":"ユーザを作成する","anchor":"creating-users","children":[]},{"title":"スーパーユーザを作成する","anchor":"creating-superusers","children":[]},{"title":"パスワードを変更する","anchor":"changing-passwords","children":[]},{"title":"ユーザを認証する","anchor":"authenticating-users","children":[]}]},{"title":"権限と認可","anchor":"permissions-and-authorization","children":[{"title":"デフォルトの権限","anchor":"default-permissions","children":[]},{"title":"グループ","anchor":"groups","children":[]},{"title":"プログラムによる権限作成","anchor":"programmatically-creating-permissions","children":[]},{"title":"権限のキャッシュ","anchor":"permission-caching","children":[]}]},{"title":"Web のリクエストにおける認証","anchor":"authentication-in-web-requests","children":[{"title":"ユーザーをログインさせるには","anchor":"how-to-log-a-user-in","children":[{"title":"認証バックエンドの選択","anchor":"selecting-the-authentication-backend","children":[]}]},{"title":"ユーザーをログアウトさせるには","anchor":"how-to-log-a-user-out","children":[]},{"title":"ログインしているユーザーにアクセスを制限する","anchor":"limiting-access-to-logged-in-users","children":[{"title":"原理的な方法","anchor":"the-raw-way","children":[]},{"title":"login_required デコレータ","anchor":"the-login-required-decorator","children":[]},{"title":"The 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":"The permission_required decorator","anchor":"the-permission-required-decorator","children":[]},{"title":"The 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":"ヘルパー関数","anchor":"helper-functions","children":[]},{"title":"ビルトインのフォーム","anchor":"module-django.contrib.auth.forms","children":[]},{"title":"テンプレート内の認証データ","anchor":"authentication-data-in-templates","children":[{"title":"ユーザ","anchor":"users","children":[]},{"title":"パーミッション","anchor":"permissions","children":[]}]}]},{"title":"admin 内でユーザを管理する","anchor":"managing-users-in-the-admin","children":[{"title":"ユーザを作成する","anchor":"id6","children":[]},{"title":"パスワードを変更する","anchor":"id7","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/1.10/topics/"},{"docname":"topics/auth/index","title":"Django でのユーザー認証","url":"/ja/1.10/topics/auth/"}],"prev":{"docname":"topics/auth/index","title":"Django でのユーザー認証","url":"/ja/1.10/topics/auth/"},"next":{"docname":"topics/auth/passwords","title":"Password management in Django","url":"/ja/1.10/topics/auth/passwords/"},"formats":{"html":"/ja/1.10/topics/auth/default/","markdown":"/ja/1.10/topics/auth/default.md","json":"/ja/1.10/topics/auth/default.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/topics/auth/default.txt","official":"https://docs.djangoproject.com/ja/1.10/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","el","pl"]}