{"title":"Menggunakan sistem pembuktian keaslian Django","version":"3.0","locale":"id","docname":"topics/auth/default","url":"/id/3.0/topics/auth/default/","canonical":"https://djangodocs.dev/id/3.0/topics/auth/default/","summary":"Dokumen ini menjelaskan penggunaan dari sistem otentifikasi Django di konfigurasi awalannya.","html":"<h1>Menggunakan sistem pembuktian keaslian 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>Dokumen ini menjelaskan penggunaan dari sistem otentifikasi Django di konfigurasi awalannya. Konfigurasi ini telah berkembang untuk melayani kebutuhan proyek paling umum, menangani jangkauan luas beralasan dari tugas, dan mempunyai penerapan cermat dari sandi dan perizinan. Untuk proyek dimana otentifikasi butuh berbeda dari awalan, Django mendukung <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/\"><span class=\"doc\">extension and customization</span></a> luas dari otentifikasi.</p>\n<p>Otentifikasi Django menyediakan kedua otentifikasi dan otorisasi bersama-sama dan umumnya mengacu pada sebagai sistem otentifikasi, ketika fitur ini agak digabungkan.</p>\n<section id=\"user-objects\">\n<span id=\"id1\"></span><h2>Obyek <code class=\"docutils literal notranslate\">User</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>Obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> adalah inti dari sistem autentifikasi. Mereka khususnya mewakili orang berinteraksi dengan situs anda dan digunakan untuk mengadakan hal-hal seperti membatasi akses, mendaftarkan profil pengguna, menyatukan isi dengan pembuat dll. Hanya satu kelas dari pengguna yang ada di otentifikasi kerangka kerja Django, yaitu, <a class=\"reference internal\" href=\"/id/3.0/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\">'superusers'</code></a> atau admin pengguna <a class=\"reference internal\" href=\"/id/3.0/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\">'staff'</code></a> hanya obyek user dengan sekumpulan atribut khusus, bukan kelas-kelas berbeda dari obyek user.</p>\n<p>Atribut utama dari pengguna awal adalah:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/3.0/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\">username</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/3.0/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\">password</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/3.0/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\">email</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/3.0/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\">first_name</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/3.0/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\">last_name</code></a></p></li>\n</ul>\n<p>Lihat :class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>full API documentation &lt;django.contrib.auth.models.User&gt;`untuk acuan penuh, dokumentasi yang mengikuti lebih berorientasi tugas.</p>\n<section id=\"creating-users\">\n<span id=\"topics-auth-creating-users\"></span><h3>Membuat pengguna<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>Cara paling langsung untuk membuat pengguna adalah menggunakan fungsi pembantu <a class=\"reference internal\" href=\"/id/3.0/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\">create_user()</code></a> yang disertakan:</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=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>user <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>create_user<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>user<span class=\"o\">.</span>last_name <span class=\"o\">=</span> <span class=\"s1\">&#39;Lennon&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>user<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Jika anda mempunai admin Django dipasang, anda dapat juga <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">create users interactively</span></a>.</p>\n</section>\n<section id=\"creating-superusers\">\n<span id=\"topics-auth-creating-superusers\"></span><h3>Membuat pengguna hebat<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>Membuat pengguna hebat menggunakan perintah <a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\">createsuperuser</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>$ python manage.py createsuperuser --username=joe --email=joe@example.com\n</code></pre></div>\n<p>Anda akan diminta untuk sandi. Setelah anda memasukkan satu, pengguna akan membuat dengan segera. Jika anda membiarkan mati pilihan <a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#cmdoption-createsuperuser-username\"><code class=\"xref std std-option docutils literal notranslate\">--username</code></a> atau <a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#cmdoption-createsuperuser-email\"><code class=\"xref std std-option docutils literal notranslate\">--email</code></a>, itu akan meminta anda untuk nilai-nilai tersebut.</p>\n</section>\n<section id=\"changing-passwords\">\n<h3>Merubah sandi<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 tidak menyimpan sandi (teks bersih) mentah pada model user, tetapi hanya campuran (lihat <a class=\"reference internal\" href=\"/id/3.0/topics/auth/passwords/\"><span class=\"doc\">documentation of how passwords are managed</span></a> untuk rincian penuh). Karena dari ini, jangan mencoba untuk mengubah atribut sanddi dari pengguna secara langsung. Ini adalah mengapa fungsi pembantu digunakan ketika membuat pengguna.</p>\n<p>Untuk merubah sandi pengguna, anda mempunyai beebrapa pilihan:</p>\n<p><a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#django-admin-changepassword\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py changepassword *username*</code></a> menawarkan metode dari merubah sandi pengguna dari baris perintah. Itu mendorong anda merubah sandi dari pengguna yang diberikan yang anda harus masukkan dua kali. Jika mereka kedua cocok, sandi baru akan berubah segera. Jika anda tidak memasok pengguna, perintah akan berusaha merubah sandi yang nama pengguna cocok dengan pengguna sistem saat ini.</p>\n<p>Anda dapat juga merubah sandi secara program, menggunakan <a class=\"reference internal\" href=\"/id/3.0/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\">set_password()</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=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> User\n<span class=\"gp\">&gt;&gt;&gt; </span>u <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>u<span class=\"o\">.</span>set_password<span class=\"p\">(</span><span class=\"s1\">&#39;new password&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>u<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Jika anda mempunyai admin Django terpasang, anda dapat juga merubah sandi pengguna pada <a class=\"reference internal\" href=\"#auth-admin\"><span class=\"std std-ref\">halaman admin sistem pembuktian keaslian</span></a>.</p>\n<p>Django juga menyediakan <a class=\"reference internal\" href=\"#built-in-auth-views\"><span class=\"std std-ref\">views</span></a> dan <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">forms</span></a> yang mungkin digunakan untuk mengizinkan pengguna merubah sandi mereka sendiri.</p>\n<p>Merubah sandi pengguna akan keluar semua sesi mereka. Lihat <a class=\"reference internal\" href=\"#session-invalidation-on-password-change\"><span class=\"std std-ref\">Penghapusan sesi pada perubahan sandi</span></a> untuk rincian.</p>\n</section>\n<section id=\"authenticating-users\">\n<h3>Pembuktian keaslian pengguna<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\">authenticate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>credentials</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>Gunakan <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> untuk memeriksa kumpulan dari mandat. Itu mengambil mandat sebagai argumen kata kunci, <code class=\"docutils literal notranslate\">username</code> dan <code class=\"docutils literal notranslate\">password</code> untuk kasus awal, periksa mereka kembali setiap <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">authentication backend</span></a>, dan kembalikan obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> jika mandat sah untuk backend. Jika mandat tidak sah untuk setiap backend atau jika backend menampilkan <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\">PermissionDenied</code></a>, itu mengembalikan <code class=\"docutils literal notranslate\">None</code>. Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> authenticate\nuser <span class=\"o\">=</span> authenticate<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s1\">&#39;john&#39;</span><span class=\"p\">,</span> password<span class=\"o\">=</span><span class=\"s1\">&#39;secret&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> user <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<p><code class=\"docutils literal notranslate\">request</code> adalah sebuah pilihan <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> yang dilewatkan pada metode <code class=\"docutils literal notranslate\">authenticate()</code> dari backend autentifikasi.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Ini adalah cara tingkat bawah untuk mengautentifikasi kumpulan dari kepercayaan; sebagai contoh, itu digunakan oleh <a class=\"reference internal\" href=\"/id/3.0/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserMiddleware</code></a>. Meskipun anda sedang menulis sisten autentifikasi anda sendiri, anda mungkin tidak menggunakan ini. Daripada jika anda sedang mencari cara untuk masuk seorang pengguna, gunakan <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\">LoginView</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>Perizinan dan Pembuktian keaslian<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 comes with a built-in permissions system. It provides a way to assign\npermissions to specific users and groups of users.</p>\n<p>Digunakan oleh situs admin Django, tetapi anda dipersilahkan menggunakannya di kode anda sendiri.</p>\n<p>Situs admin Django menggunakan perizinan sebagai berikut:</p>\n<ul class=\"simple\">\n<li><p>Akses untuk menampilkan obyek adalah terbatas pada pengguna dengan perizinan &quot;view&quot; atau &quot;change&quot; untuk jenis itu dari obyek.</p></li>\n<li><p>Akses ke tampilan formulir &quot;add&quot; dan menambah sebuah obyek adalah terbatas untuk pengguna dengan perizinan &quot;add&quot; untuk jenis itu dari obyek.</p></li>\n<li><p>Akses ke tampilan daftar perubahan, tampilan formulir &quot;change&quot; dan merubah sebuah obyek adalah terbatas untuk pengguna dengan perizinan &quot;change&quot; untuk jenis obyek itu.</p></li>\n<li><p>Akses untuk menghapus sebuah obyek adalah terbatas pada pengguna dengan perizinan &quot;hapus&quot; untuk jenis itu dari obyek.</p></li>\n</ul>\n<p>Permissions can be set not only per type of object, but also per specific\nobject instance. By using the\n<a class=\"reference internal\" href=\"/id/3.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_view_permission\" title=\"django.contrib.admin.ModelAdmin.has_view_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_view_permission()</code></a>,\n<a class=\"reference internal\" href=\"/id/3.0/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\">has_add_permission()</code></a>,\n<a class=\"reference internal\" href=\"/id/3.0/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\">has_change_permission()</code></a> and\n<a class=\"reference internal\" href=\"/id/3.0/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\">has_delete_permission()</code></a> methods provided\nby the <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> class, it is possible to\ncustomize permissions for different object instances of the same type.</p>\n<p>Obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> mempunyai dua bidang many-to-many: <code class=\"docutils literal notranslate\">groups</code> dan <code class=\"docutils literal notranslate\">user_permissions</code>. Obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> dapat mengakses obyek terkait mereka di cara yang sama seperti yang <a class=\"reference internal\" href=\"/id/3.0/topics/db/models/\"><span class=\"doc\">Django model</span></a> lain:</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>myuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>set<span class=\"p\">([</span>group_list<span class=\"p\">])</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>add<span class=\"p\">(</span>group<span class=\"p\">,</span> group<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>remove<span class=\"p\">(</span>group<span class=\"p\">,</span> group<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>groups<span class=\"o\">.</span>clear<span class=\"p\">()</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>set<span class=\"p\">([</span>permission_list<span class=\"p\">])</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">,</span> permission<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>remove<span class=\"p\">(</span>permission<span class=\"p\">,</span> permission<span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">)</span>\nmyuser<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>clear<span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"default-permissions\">\n<h3>Perizinan pertama<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>When <code class=\"docutils literal notranslate\">django.contrib.auth</code> is listed in your <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>\nsetting, it will ensure that four default permissions -- add, change, delete,\nand view -- are created for each Django model defined in one of your installed\napplications.</p>\n<p>Perizinan ini akan dibuat ketika anda menjalankan <a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a>; pertama kali anda menjalankan <code class=\"docutils literal notranslate\">migrate</code> setelah menambahkan <code class=\"docutils literal notranslate\">django.contrib.auth</code> pada <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, perizinan awalan akan dibuat untuk semua model sebelumnya-terpasang, sama halnya untuk tiap model baru sedang dipasang pada waktu itu. Kemudian, itu akan membuat perizinan awalan untuk model baru setiap kali anda menjalankan <a class=\"reference internal\" href=\"/id/3.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a> (fungsi yang membuat perizinan adalah terhubung ke sinyal <a class=\"reference internal\" href=\"/id/3.0/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a>).</p>\n<p>Menganggap anda memiliki sebuah aplikasi dengan <a class=\"reference internal\" href=\"/id/3.0/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\">app_label</code></a> <code class=\"docutils literal notranslate\">foo</code> dan model bernama <code class=\"docutils literal notranslate\">Bar</code>, pada percobaan untuk perizinan dasar anda harus gunakan:</p>\n<ul class=\"simple\">\n<li><p>tambah: <code class=\"docutils literal notranslate\">user.has_perm('foo.add_bar')</code></p></li>\n<li><p>rubah: <code class=\"docutils literal notranslate\">user.has_perm('foo.change_bar')</code></p></li>\n<li><p>hapus: <code class=\"docutils literal notranslate\">user.has_perm('foo.delete_bar')</code></p></li>\n<li><p>view: <code class=\"docutils literal notranslate\">user.has_perm('foo.view_bar')</code></p></li>\n</ul>\n<p>Model <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.Permission\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\">Permission</code></a> jarang diakses secara langsung.</p>\n</section>\n<section id=\"groups\">\n<h3>Kelompok<a class=\"heading-anchor\" href=\"#groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Model <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.Group\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.models.Group</code></a> adalah cara umum dari mengkategorikan pengguna sehingga anda dapat memberlakukan perizinan, atau beberapa label lain, ke penggun tersebut. Seorang pengguna dapat milik ke tiap sejumlah kelompok.</p>\n<p>Seorang pengguna di kelompok secara otomatis mempunyai perizinan diberikan ke kelompok itu. Sebagai contoh, jika kelompok <code class=\"docutils literal notranslate\">Site editors</code> mempunyai perizinan <code class=\"docutils literal notranslate\">can_edit_home_page</code>, tiap pengguna di kelompok itu akan mempunyai perizinan itu.</p>\n<p>Diluar perizinan, kelompok adalah cara nyaman untuk mengkategorikan pengguna untuk memberikan mereka beberapa label, atau memperpanjang kegunaan. Sebagai contoh, anda dapat membuat kelompok <code class=\"docutils literal notranslate\">'Special users'</code>, dan anda dapat menulis kode yang dapat, katakan, memberikan mereka akses ke bagian hanya-anggota dari situs anda, atau mengirim mereka pesan surel hanya-pesan.</p>\n</section>\n<section id=\"programmatically-creating-permissions\">\n<h3>Pemrograman membuat perizinan<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>Selagi <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#custom-permissions\"><span class=\"std std-ref\">custom permissions</span></a> dapat ditentukan dalam kelas <code class=\"docutils literal notranslate\">Meta</code> model, anda dapat juga membuat perizinan secara langsung. Sebagai contoh, anda dapat membuat perizinan <code class=\"docutils literal notranslate\">can_publish</code> untuk model <code class=\"docutils literal notranslate\">BlogPost</code> di <code class=\"docutils literal notranslate\">myapp</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> BlogPost\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> Permission\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n\ncontent_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>BlogPost<span class=\"p\">)</span>\npermission <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n    codename<span class=\"o\">=</span><span class=\"s1\">&#39;can_publish&#39;</span><span class=\"p\">,</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;Can Publish Posts&#39;</span><span class=\"p\">,</span>\n    content_type<span class=\"o\">=</span>content_type<span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Perizinan dapat kemudian diberikan pada <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> melalui atribut <code class=\"docutils literal notranslate\">user_permissions</code> nya atau ke <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.Group\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\">Group</code></a> melalui atribut <code class=\"docutils literal notranslate\">permissions</code> nya.</p>\n<aside class=\"admonition-proxy-models-need-their-own-content-type admonition\" role=\"note\">\n<p class=\"admonition-title\">Proxy models need their own content type</p>\n<p>If you want to create <a class=\"reference internal\" href=\"#proxy-models-permissions-topic\"><span class=\"std std-ref\">permissions for a proxy model</span></a>, pass <code class=\"docutils literal notranslate\">for_concrete_model=False</code> to\n<a class=\"reference internal\" href=\"/id/3.0/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentTypeManager.get_for_model\" title=\"django.contrib.contenttypes.models.ContentTypeManager.get_for_model\"><code class=\"xref py py-meth docutils literal notranslate\">ContentTypeManager.get_for_model()</code></a> to get the appropriate\n<code class=\"docutils literal notranslate\">ContentType</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>content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>BlogPostProxy<span class=\"p\">,</span> for_concrete_model<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.2</p><p>In older versions, proxy models use the content type of the concrete\nmodel.</p>\n</aside>\n</aside>\n</section>\n<section id=\"permission-caching\">\n<h3>Perizinan penyimpanan sementara<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>Perizinan tembolok <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend\" title=\"django.contrib.auth.backends.ModelBackend\"><code class=\"xref py py-class docutils literal notranslate\">ModelBackend</code></a> pada obyek user setelah pertama kali mereka butuh diambil untuk pemeriksaan perizinan. Ini adalah khususnya baik untuk siklus tanggapan-permintaan sejak perizinan tidak secara khusus memeriksa segera setelah mereka sitambahkan (dalam admin, sebagai contoh). Jika anda menambahkan perizinan dan memeriksa mereka segera setelahnya, dalam percobaan atau tampilan sebagai contoh, pemecahan termudah adalah mengambil kembali dari basisdata. Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> Permission<span class=\"p\">,</span> User\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"kn\">import</span> ContentType\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> get_object_or_404\n\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> BlogPost\n\n<span class=\"k\">def</span> <span class=\"nf\">user_gains_perms</span><span class=\"p\">(</span>request<span class=\"p\">,</span> user_id<span class=\"p\">):</span>\n    user <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>User<span class=\"p\">,</span> pk<span class=\"o\">=</span>user_id<span class=\"p\">)</span>\n    <span class=\"c1\"># any permission check will cache the current set of permissions</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_blogpost&#39;</span><span class=\"p\">)</span>\n\n    content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>BlogPost<span class=\"p\">)</span>\n    permission <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>\n        codename<span class=\"o\">=</span><span class=\"s1\">&#39;change_blogpost&#39;</span><span class=\"p\">,</span>\n        content_type<span class=\"o\">=</span>content_type<span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    user<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">)</span>\n\n    <span class=\"c1\"># Checking the cached permission set</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_blogpost&#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    user <span class=\"o\">=</span> get_object_or_404<span class=\"p\">(</span>User<span class=\"p\">,</span> pk<span class=\"o\">=</span>user_id<span class=\"p\">)</span>\n\n    <span class=\"c1\"># Permission cache is repopulated from the database</span>\n    user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s1\">&#39;myapp.change_blogpost&#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 id=\"proxy-models\">\n<span id=\"proxy-models-permissions-topic\"></span><h3>Model proxy<a class=\"heading-anchor\" href=\"#proxy-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Proxy models work exactly the same way as concrete models. Permissions are\ncreated using the own content type of the proxy model. Proxy models don't\ninherit the permissions of the concrete model they subclass:</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=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        permissions <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s1\">&#39;can_eat_pizzas&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Can eat pizzas&#39;</span><span class=\"p\">)]</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Student</span><span class=\"p\">(</span>Person<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        permissions <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s1\">&#39;can_deliver_pizzas&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Can deliver pizzas&#39;</span><span class=\"p\">)]</span>\n\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"c1\"># Fetch the content type for the proxy model.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> content_type <span class=\"o\">=</span> ContentType<span class=\"o\">.</span>objects<span class=\"o\">.</span>get_for_model<span class=\"p\">(</span>Student<span class=\"p\">,</span> for_concrete_model<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> student_permissions <span class=\"o\">=</span> Permission<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>content_type<span class=\"o\">=</span>content_type<span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"p\">[</span>p<span class=\"o\">.</span>codename <span class=\"k\">for</span> p <span class=\"ow\">in</span> student_permissions<span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"s1\">&#39;add_student&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;change_student&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;delete_student&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;view_student&#39;</span><span class=\"p\">,</span>\n<span class=\"s1\">&#39;can_deliver_pizzas&#39;</span><span class=\"p\">]</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"k\">for</span> permission <span class=\"ow\">in</span> student_permissions<span class=\"p\">:</span>\n<span class=\"o\">...</span>     user<span class=\"o\">.</span>user_permissions<span class=\"o\">.</span>add<span class=\"p\">(</span>permission<span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s1\">&#39;app.add_person&#39;</span><span class=\"p\">)</span>\n<span class=\"kc\">False</span>\n<span class=\"o\">&gt;&gt;&gt;</span> user<span class=\"o\">.</span>has_perm<span class=\"p\">(</span><span class=\"s1\">&#39;app.can_eat_pizzas&#39;</span><span class=\"p\">)</span>\n<span class=\"kc\">False</span>\n<span class=\"o\">&gt;&gt;&gt;</span> user<span class=\"o\">.</span>has_perms<span class=\"p\">((</span><span class=\"s1\">&#39;app.add_student&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;app.can_deliver_pizzas&#39;</span><span class=\"p\">))</span>\n<span class=\"kc\">True</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"2.2\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.2</p><p>In older versions, permissions for proxy models use the content type of\nthe concrete model rather than content type of the proxy model.</p>\n</aside>\n</section>\n</section>\n<section id=\"authentication-in-web-requests\">\n<span id=\"auth-web-requests\"></span><h2>Pembuktian keaslian di permintaan Jaringan<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 menggunakan <a class=\"reference internal\" href=\"/id/3.0/topics/http/sessions/\"><span class=\"doc\">sessions</span></a> dan middleware untuk menghubungkan sitem otentifikasi kedalam <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">request objects</code></a>.</p>\n<p>Ini menyediakan sebuah atribut <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\">request.user</code></a> pada setiap permintaan yang mewakili pengguna saat ini. Jika pengguna saat ini belum masuk, atribut ini akan disetel ke sebuah instance dari <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\">AnonymousUser</code></a>, sebaliknya itu akan berupa sebuah instance dari <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a>.</p>\n<p>Anda dapat memberitahu mereka selain dengan <a class=\"reference internal\" href=\"/id/3.0/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\">is_authenticated</code></a>, seperti begitu</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> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<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>Bagaimana cara masuk pengguna<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>Jika anda mempunyai pengguna terotentifikasi anda ingin lampirkan ke sesi saat ini - ini dilakukan dengan fungsi <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</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\">login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</em>, <em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">None</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>Untuk pengguna masuk, dari tampilan, gunakan <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>. Itu mengambil sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> dan sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</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\">login()</code></a> menyimpan ID pengguna di sesi, menggunakan kerangka kerja sesi Django.</p>\n<p>Catat bahwa tiap data disetel selama sesi anonim dipertahankan di sesi setelah pengguna masuk.</p>\n<p>Contoh ini menunjukkan bagaimana anda mungkin menggunakan kedua <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> dan <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> authenticate<span class=\"p\">,</span> login\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    username <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s1\">&#39;username&#39;</span><span class=\"p\">]</span>\n    password <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"p\">[</span><span class=\"s1\">&#39;password&#39;</span><span class=\"p\">]</span>\n    user <span class=\"o\">=</span> authenticate<span class=\"p\">(</span>request<span class=\"p\">,</span> username<span class=\"o\">=</span>username<span class=\"p\">,</span> password<span class=\"o\">=</span>password<span class=\"p\">)</span>\n    <span class=\"k\">if</span> user <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        login<span class=\"p\">(</span>request<span class=\"p\">,</span> user<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</dd></dl>\n\n<section id=\"selecting-the-authentication-backend\">\n<h4>Memilih backend otentifikasi<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>Ketika seorang pengguna masuk, ID pengguna dan backend yang telah digunakan untuk autentifikasi disimpan dalam sesi pengguna. Ini mengizinkan <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">authentication backend</span></a> sama untuk mengambil rincian pengguna pada permintaan akan datang. Backend autentifikasi untuk menyimpan sesi dipilih sebagai berikut:</p>\n<ol class=\"arabic simple\">\n<li><p>Gunakan nilai dai argumen <code class=\"docutils literal notranslate\">backend</code> pilihan, jika disediakan.</p></li>\n<li><p>Gunakan nilai dari atribut <code class=\"docutils literal notranslate\">user.backend</code>, jika hadir. Ini mengizinkan memasangkan <a class=\"reference internal\" href=\"#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\">authenticate()</code></a> dan <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">login()</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\">authenticate()</code></a> menyetel atribut  <code class=\"docutils literal notranslate\">user.backend</code> pada obyek user dia kembalikan.</p></li>\n<li><p>Gunakan <code class=\"docutils literal notranslate\">backend</code> dalam <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a>, jika hanya ada satu.</p></li>\n<li><p>Sebaliknya, munculkan sebuah pengecualian.</p></li>\n</ol>\n<p>Di kasus 1 dan 2, nilai dari argumen <code class=\"docutils literal notranslate\">backend</code> atau atribut <code class=\"docutils literal notranslate\">user.backend</code> harus di impor bertitik jalur deretan karakter (seperti yang ditemukan di <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a>), bukan kelas backend sebenarnya.</p>\n</section>\n</section>\n<section id=\"how-to-log-a-user-out\">\n<h3>Bagaimana cara pengguna keluar<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\">logout</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</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>Untuk keluar pengguna yang telah masuk melalui <a class=\"reference internal\" href=\"#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.login()</code></a>, gunakan <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.logout()</code></a> dalam tampilan anda. Itu mengambil sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> dan tidak nilai mempunyai kembalian. Contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> logout\n\n<span class=\"k\">def</span> <span class=\"nf\">logout_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    logout<span class=\"p\">(</span>request<span class=\"p\">)</span>\n    <span class=\"c1\"># Redirect to a success page.</span>\n</code></pre></div>\n<p>Catat bahwa <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">logout()</code></a> tidak melempar kesalahan apapun jika pengguna tidak masuk.</p>\n<p>Ketika anda memanggil <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">logout()</code></a>, data sesi untuk permintaan saat ini sepenuhnya dibersihkan. Semua data yang ada dipindahkan. Ini adalah untuk mencegah orang lain dari menggunakan peramban Jaringan sama untuk masuk dan memiliki akses ke data sesi pengguna sebelumnya. Jika anda ingin menaruh apapun kedalam sesi yang akan tersedia ke pengguna segera setelah keluar, lakukan itu <em>setelah</em> memanggil <a class=\"reference internal\" href=\"#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.auth.logout()</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"limiting-access-to-logged-in-users\">\n<h3>Membatasi akses ke pengguna masuk<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>Cara mentah<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>The raw way to limit access to pages is to check\n<a class=\"reference internal\" href=\"/id/3.0/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\">request.user.is_authenticated</code></a> and either redirect to a\nlogin page:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> redirect\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n        <span class=\"k\">return</span> redirect<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>settings<span class=\"o\">.</span>LOGIN_URL<span class=\"p\">,</span> request<span class=\"o\">.</span>path<span class=\"p\">))</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>...atau menampilkan pesan kesalahan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_authenticated<span class=\"p\">:</span>\n        <span class=\"k\">return</span> render<span class=\"p\">(</span>request<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>Penghias <code class=\"docutils literal notranslate\">login_required</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\">login_required</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</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>Sebagai jalan pintas, anda dapat menggunakan penghias <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\">login_required()</code></a> yang cocok.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p><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\">login_required()</code></a> melakukan berikut:</p>\n<ul class=\"simple\">\n<li><p>Jika pengguna tidak masuk, alihkan ke <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>, melewati jalur mutlak saat ini di permintaan deretan karakter. Contoh: <code class=\"docutils literal notranslate\">/accounts/login/?next=/polls/3/</code>.</p></li>\n<li><p>Jika pengguna masuk, jalankan tampilan secara biasa. Kode tampilan adalah bebas untuk menganggap pengguna adalah masuk.</p></li>\n</ul>\n<p>Secara awalan, jalur yang pengguna harus dialihkan untuk atas keberhasilan otentifikasi adalah disimpan di permintaan parameter deretan karakter disebut <code class=\"docutils literal notranslate\">&quot;next&quot;</code>. Jika anda akan memilih menggunakan nama berbeda untuk parameter ini, <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\">login_required()</code></a> mengambil sebuah pilihan parameter <code class=\"docutils literal notranslate\">redirect_field_name</code>.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span>redirect_field_name<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=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Catat bahwa jika anda menyediakan nilai pada <code class=\"docutils literal notranslate\">redirect_field_name</code>, anda akan paling disukai butuh menyesuaikan cetakan masuk anda juga, sejak cetakan varaibel konteks yang menyimpan jalur pengalihan akan menggunakan nilai dari <code class=\"docutils literal notranslate\">redirect_field_name``sebagai kuncinya daripada ``&quot;next&quot;</code> (awalan).</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\">login_required()</code></a> juga mengambil sebuah pilihan parameter <code class=\"docutils literal notranslate\">login_url</code>. Contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required\n\n<span class=\"nd\">@login_required</span><span class=\"p\">(</span>login_url<span class=\"o\">=</span><span class=\"s1\">&#39;/accounts/login/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Catat bahwa jika anda tidak menentukan parameter <code class=\"docutils literal notranslate\">login_url</code>, anda akan butuh memastikan bahwa <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> dan tampilan masuk anda benar terhubung. Sebagai contoh, menggunakan awalan, tambah baris berikut ke URLconf anda:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\npath<span class=\"p\">(</span><span class=\"s1\">&#39;accounts/login/&#39;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>LoginView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> juga menerima nama-nama fungsi tampilan dan <a class=\"reference internal\" href=\"/id/3.0/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">named URL patterns</span></a>. Ini mengizinkan anda secara bebas memetakan kembali ke tampilan masuk anda dalam URLconf tanpa harus memperbaharui pengaturan.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Penghias  <code class=\"docutils literal notranslate\">login_required</code> TIDAK memeriksa bendera <code class=\"docutils literal notranslate\">is_active</code> pada pengguna, tetapi awalan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> menolak pengguna tidak aktif.</p>\n</aside>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Lihat juga</p>\n<p>Jika anda sedang menulis tampilan penyesuaian untuk Django admin (atau butuh pemeriksaan otorisasi sama bahwa tampilan pasang-tetap digunakan), anda mungkin menemukan penghias <a class=\"reference internal\" href=\"/id/3.0/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\">django.contrib.admin.views.decorators.staff_member_required()</code></a> cara lain yang berguna pada <code class=\"docutils literal notranslate\">login_required()</code>.</p>\n</aside>\n</section>\n<section id=\"the-loginrequired-mixin\">\n<h4>Mixin <code class=\"docutils literal notranslate\">LoginRequired</code><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>Ketika menggunakan <a class=\"reference internal\" href=\"/id/3.0/topics/class-based-views/\"><span class=\"doc\">class-based views</span></a>, anda dapat mencapai kebiasaan lama seperti dengan <code class=\"docutils literal notranslate\">login_required</code> dengan menggunakan <code class=\"docutils literal notranslate\">LoginRequiredMixin</code>. Mixin harus di tempat paling kanan di daftar warisan.</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\">class</span> </em><span class=\"sig-name descname\">LoginRequiredMixin</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><p>Jika sebuah tampilan menggunakan mixin ini, semua permintaan oleh pengguna bukan-terotentifikasi akan dialihkan ke halaman masuk atau menampilkan kesalahan HTTP 403 Forbidden, tergantung pada parameter <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\">raise_exception</code></a>.</p>\n<p>Anda dapat menyetel tiap dari parameter dari <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\">AccessMixin</code></a> untuk menyesuaikan menangani dari pengguna tidak sah:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> LoginRequiredMixin\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>LoginRequiredMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    login_url <span class=\"o\">=</span> <span class=\"s1\">&#39;/login/&#39;</span>\n    redirect_field_name <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\">Catatan</p>\n<p>Seperti penghias <code class=\"docutils literal notranslate\">login_required</code> mixin ini TIDAK memeriksa bendera <code class=\"docutils literal notranslate\">is_active</code> pada pengguna, tetapi awalan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> menolak pengguna tidak aktif.</p>\n</aside>\n</section>\n<section id=\"limiting-access-to-logged-in-users-that-pass-a-test\">\n<h4>Membatasi akses ke pengguna masuk yang melewatkan percobaan<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>Untuk membatasi akses berdasarkan pada perizinan tertentu atau beberapa percobaan lain, anda akan melakukan pada dasarnya hal sama seperti digambarkan di bagian sebelumnya.</p>\n<p>You can run your test on <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.user\" title=\"django.http.HttpRequest.user\"><code class=\"xref py py-attr docutils literal notranslate\">request.user</code></a> in\nthe view directly. For example, this view checks to make sure the user has an\nemail in the desired domain and if not, redirects 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=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> redirect\n\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s1\">&#39;@example.com&#39;</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> redirect<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> request<span class=\"o\">.</span>path<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\">user_passes_test</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">test_func</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</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>Sebagai sebuah jalan pintas, anda dapat menggunakan penghias <code class=\"docutils literal notranslate\">user_passes_test</code> yang cocok yang melakukan sebuah pengalihan ketika callable mengembalikan <code class=\"docutils literal notranslate\">False</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> user_passes_test\n\n<span class=\"k\">def</span> <span class=\"nf\">email_check</span><span class=\"p\">(</span>user<span class=\"p\">):</span>\n    <span class=\"k\">return</span> user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<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>email_check<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p><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\">user_passes_test()</code></a> mengambil argumen wajib: sebuah callable yang mengambil obyek <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> dan mengembalikan <code class=\"docutils literal notranslate\">True</code> jika pengguna diizinkan melihat halaman. Catat bahwa <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\">user_passes_test()</code></a> tidak secara otomatis memeriksa bahwa the <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> bukan anonim.</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\">user_passes_test()</code></a> mengambil dua argumen pilihan:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">login_url</code></dt><dd><p>Biarkan anda menentukan URL yang pengguna tidak melewati percobaan akan dialihkan. Itu mungkin halaman masuk dan awalan ke <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> jika anda tidak menentukan satu.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">redirect_field_name</code></dt><dd><p>Sama seperti <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\">login_required()</code></a>. Atur itu ke <code class=\"docutils literal notranslate\">None</code> memindahkannya dari URL, yang anda mungkin ingin melakukannya jika anda mengalihkan pengguna yang tidak melewati percobaan ke halaman bukan-masuk dimana tidak ada &quot;next page&quot;.</p>\n</dd>\n</dl>\n<p>Sebagai contoh:</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>email_check<span class=\"p\">,</span> login_url<span class=\"o\">=</span><span class=\"s1\">&#39;/login/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</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\">class</span> </em><span class=\"sig-name descname\">UserPassesTestMixin</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><p>Ketika menggunakan <a class=\"reference internal\" href=\"/id/3.0/topics/class-based-views/\"><span class=\"doc\">class-based views</span></a>, anda dapat menggunakan <code class=\"docutils literal notranslate\">UserPassesTestMixin</code> untuk melakukan ini.</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\">test_func</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>Anda harus menimpa metode <code class=\"docutils literal notranslate\">test_func()</code> dari kelas untuk menyediakan percobaan yang dilakukan. Lebih lanjut, anda dapat menyetel tiap parameter dari <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\">AccessMixin</code></a> untuk menyesuaikan penangangan dari pengguna tidak sah:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> UserPassesTestMixin\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n\n    <span class=\"k\">def</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>request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<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\">get_test_func</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>Anda dapat juga menimpa metode <code class=\"docutils literal notranslate\">get_test_func()</code> untuk memiliki penggunaan mixin fungsi bernama berbeda untuk pemeriksaannya (sebagai ganti <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\">test_func()</code></a>).</p>\n</dd></dl>\n\n<aside class=\"admonition-stacking-userpassestestmixin admonition\" role=\"note\">\n<p class=\"admonition-title\">Menumpuk <code class=\"docutils literal notranslate\">UserPassesTestMixin</code></p>\n<p>Diakrenakan cara <code class=\"docutils literal notranslate\">UserPassesTestMixin</code> diterapkan, anda tida dapat menumpuk mereka di daftar warisan anda. Berikut TIDAK bekerja:</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=\"nc\">TestMixin1</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">):</span>\n    <span class=\"k\">def</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>request<span class=\"o\">.</span>user<span class=\"o\">.</span>email<span class=\"o\">.</span>endswith<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=\"nc\">TestMixin2</span><span class=\"p\">(</span>UserPassesTestMixin<span class=\"p\">):</span>\n    <span class=\"k\">def</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>request<span class=\"o\">.</span>user<span class=\"o\">.</span>username<span class=\"o\">.</span>startswith<span class=\"p\">(</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>TestMixin1<span class=\"p\">,</span> TestMixin2<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Jika <code class=\"docutils literal notranslate\">TestMixin1</code> akan memanggil <code class=\"docutils literal notranslate\">super()</code> dan mengambil hasi itu kedalam akun, <code class=\"docutils literal notranslate\">TestMixin1</code> tidak akan bekerja berdiri sendiri lagi.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"the-permission-required-decorator\">\n<h4>Penghias <code class=\"docutils literal notranslate\">permission_required</code><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\">permission_required</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">perm</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">raise_exception<span class=\"o\">=</span><span class=\"default_value\">False</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>Itu adalah cara lain tugas umum untuk memeriksa apakah seorang pengguna mempunyai perizinan khusus. Untuk alasan tersebut, Django menyediakan jalan pintas untuk kasus itu: penghias the <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\">permission_required()</code></a>.:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> permission_required\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.add_choice&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Just like the <a class=\"reference internal\" href=\"/id/3.0/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\">has_perm()</code></a> method,\npermission names take the form <code class=\"docutils literal notranslate\">&quot;&lt;app label&gt;.&lt;permission codename&gt;&quot;</code>\n(i.e. <code class=\"docutils literal notranslate\">polls.add_choice</code> for a permission on a model in the <code class=\"docutils literal notranslate\">polls</code>\napplication).</p>\n<p>Penghias mungkin juga mengambil perizinan berulang, dalam hal ini pengguna harus memiliki semua perizinan untuk mengakses tampilan.</p>\n<p>Catat bahwa <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\">permission_required()</code></a> juga mengambil sebuah pilihan parameter <code class=\"docutils literal notranslate\">login_url</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> permission_required\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.add_choice&#39;</span><span class=\"p\">,</span> login_url<span class=\"o\">=</span><span class=\"s1\">&#39;/loginpage/&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Ketika di penghias <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\">login_required()</code></a>, awalan <code class=\"docutils literal notranslate\">login_url</code>  ke <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>.</p>\n<p>Jika parameter <code class=\"docutils literal notranslate\">raise_exception</code> diberikan, penghias akan memunculkan <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\">PermissionDenied</code></a>, mendorong <a class=\"reference internal\" href=\"/id/3.0/ref/views/#http-forbidden-view\"><span class=\"std std-ref\">the 403 (HTTP Forbidden) view</span></a> daripada mengalihkan ke halaman masuk.</p>\n<p>Jika anda ingin menggunakan <code class=\"docutils literal notranslate\">raise_exception</code> tetapi juga memberikan pengguna anda kesempatan untuk masuk terlebih dahulu, anda dapat menambahkan penghias <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\">login_required()</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"kn\">import</span> login_required<span class=\"p\">,</span> permission_required\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;polls.add_choice&#39;</span><span class=\"p\">,</span> raise_exception<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>This also avoids a redirect loop when <a class=\"reference internal\" href=\"#django.contrib.auth.views.LoginView\" title=\"django.contrib.auth.views.LoginView\"><code class=\"xref py py-class docutils literal notranslate\">LoginView</code></a>'s\n<code class=\"docutils literal notranslate\">redirect_authenticated_user=True</code> and the logged-in user doesn't have\nall of the required permissions.</p>\n</dd></dl>\n\n</section>\n<section id=\"the-permissionrequiredmixin-mixin\">\n<h4>Mixin <code class=\"docutils literal notranslate\">PermissionRequiredMixin</code><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>Untuk memberlakukan pemeriksaan perizinan pada <a class=\"reference internal\" href=\"/id/3.0/ref/class-based-views/\"><span class=\"doc\">class-based views</span></a>, anda dapat menggunakan <code class=\"docutils literal notranslate\">PermissionRequiredMixin</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\">class</span> </em><span class=\"sig-name descname\">PermissionRequiredMixin</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><p>Mixin ini, seperti penghias <code class=\"docutils literal notranslate\">permission_required</code>, memeriksa apakah pengguna mengakses sebuah tampilan mempunyai semua perizinan yang diberikan. Anda harus menentukan perizinan (atau perulangan dari perizinan) menggunakan parameter <code class=\"docutils literal notranslate\">permission_required</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.mixins</span> <span class=\"kn\">import</span> PermissionRequiredMixin\n\n<span class=\"k\">class</span> <span class=\"nc\">MyView</span><span class=\"p\">(</span>PermissionRequiredMixin<span class=\"p\">,</span> View<span class=\"p\">):</span>\n    permission_required <span class=\"o\">=</span> <span class=\"s1\">&#39;polls.add_choice&#39;</span>\n    <span class=\"c1\"># Or multiple of permissions:</span>\n    permission_required <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;polls.view_choice&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;polls.change_choice&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Anda dapat menyetel tiap dari parameter dari <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\">AccessMixin</code></a> untuk menyesuaikan menangani dari pengguna tidak sah.</p>\n<p>Anda dapat juga menimpa metode ini:</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\">get_permission_required</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>Mengembalikan perulangan dari nama perizinan digunakan oleh mixin. Awalan pada atribut <code class=\"docutils literal notranslate\">permission_required</code>, dirubah ke sebuah tuple juka memungkinkan.</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\">has_permission</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>Mengembalikan sebuah boolean menunjukkan apakah pengguna saat ini mempunyai perizinan untuk menjalankan tampilan dihiasi. Secara awalan, ini mengembalikan hasil dari memanggil <a class=\"reference internal\" href=\"/id/3.0/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\">has_perms()</code></a> dengan daftar perizinan dikembalikan oleh <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\">get_permission_required()</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>Mengalihkan permintaan tidak sah di tampilan berdasarkan-kelas<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=\"/id/3.0/ref/class-based-views/\"><span class=\"doc\">class-based views</span></a>, the <code class=\"docutils literal notranslate\">AccessMixin</code> can be used to configure\nthe behavior of a view when access is denied. Authenticated users are denied\naccess with an HTTP 403 Forbidden response. Anonymous users are redirected to\nthe login page or shown an HTTP 403 Forbidden response, depending 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\">raise_exception</code></a> attribute.</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\">class</span> </em><span class=\"sig-name descname\">AccessMixin</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><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\">login_url</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>Nilai balik awalan untuk <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\">get_login_url()</code></a>. Awalan pada <code class=\"docutils literal notranslate\">None</code> dalam hal ini <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\">get_login_url()</code></a> jatuh kebelakang untuk <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</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\">permission_denied_message</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>Nilai balik awalan untuk <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\">get_permission_denied_message()</code></a>. Awalan pada sebuah deretan karakter kosong.</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\">redirect_field_name</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>Nilai balikan awalan untuk <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\">get_redirect_field_name()</code></a>. Awalan ke <code class=\"docutils literal notranslate\">&quot;next&quot;</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\">raise_exception</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\">True</code>, a\n<a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\">PermissionDenied</code></a> exception is raised\nwhen the conditions are not met.  When <code class=\"docutils literal notranslate\">False</code> (the default),\nanonymous users are redirected to the login page.</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\">get_login_url</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>Mengembalikan URL yang pengguna tidak melewati percobaan akan dialihkan. Mengembalikan <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\">login_url</code></a> jika disetel, atau sebaliknya <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>.</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\">get_permission_denied_message</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>Ketika <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\">raise_exception</code></a> adalah <code class=\"docutils literal notranslate\">True</code>, metode ini dapat digunakan untuk mengendalikan pesan kesalahan dilewatkan ke penangan kesalahan untuk menampilkan ke pengguna. Mengembalikan atribut <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\">permission_denied_message</code></a> secara awalan.</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\">get_redirect_field_name</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>Mengembalikan nama dari permintaan parameter yang akan mengandung URL pengguna harus dialihkan setelah berhasil masuk. Jika anda menyetel ini ke <code class=\"docutils literal notranslate\">None</code>, sebuah permintaan parameter tidak akan ditambahkan. Mengembalikan atribut <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\">redirect_field_name</code></a> secara awalan.</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\">handle_no_permission</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>Tergantung pada nilai dari <code class=\"docutils literal notranslate\">raise_exception</code>, metode antara memunculkan pengecualian <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\">PermissionDenied</code></a> atau mengalihkan pengguna ke <code class=\"docutils literal notranslate\">login_url</code>, secara pilihan menyertakan <code class=\"docutils literal notranslate\">redirect_field_name</code> jika itu disetel.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"session-invalidation-on-password-change\">\n<span id=\"id3\"></span><h4>Penghapusan sesi pada perubahan sandi<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<p>Jika <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\">AUTH_USER_MODEL</code></a> anda warisan dari <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\">AbstractBaseUser</code></a> atau menerapkan metode <a class=\"reference internal\" href=\"/id/3.0/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\">get_session_auth_hash()</code></a> miliknya, sesi terotentifikasi akan menyertakan campuran dikembalikan oleh fungsi ini. Di kasus <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\">AbstractBaseUser</code></a>, ini adalah HMAC dari bidang sandi. Django memeriksa bahwa campuran di sesi untuk setiap permintaan cocok satu yang dihitung selama permintaan. Ini mengizinkan pengguna untuk keluar dari sesi mereka dengan merubah sandi mereka.</p>\n<p>Tampilan rubah sandi awalan disertakan dengan Django, tampilan <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordChangeView\" title=\"django.contrib.auth.views.PasswordChangeView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordChangeView</code></a> dan the <code class=\"docutils literal notranslate\">user_change_password</code> dalam admin <a class=\"reference internal\" href=\"/id/3.0/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</code></a>, perbaharui sesi dengan campuran sandi baru sehingga pengguna merubah sandi mereka sendiri tidak keluar. Jika anda mempunyai tampilan rubah sandi penyesuaian dan berharap memiliki perilaku sama, gunakan fungsi <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\">update_session_auth_hash()</code></a>.</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\">update_session_auth_hash</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">user</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>Fungsi ini mengambil permintaan saat ini dan memperbaharui obyek user dari dimana campuran sesi baru akan berasal dan memperbaharui campuran sesi dengan benar. Itu juga memutar kunci sesi sehingga kue sesi tercuri akan menjadi tidak sah.</p>\n<p>Contoh penggunaan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> update_session_auth_hash\n\n<span class=\"k\">def</span> <span class=\"nf\">password_change</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        form <span class=\"o\">=</span> PasswordChangeForm<span class=\"p\">(</span>user<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">,</span> data<span class=\"o\">=</span>request<span class=\"o\">.</span>POST<span class=\"p\">)</span>\n        <span class=\"k\">if</span> form<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            form<span class=\"o\">.</span>save<span class=\"p\">()</span>\n            update_session_auth_hash<span class=\"p\">(</span>request<span class=\"p\">,</span> form<span class=\"o\">.</span>user<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\">Catatan</p>\n<p>Sejak <a class=\"reference internal\" href=\"/id/3.0/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\">get_session_auth_hash()</code></a> adalah berdasarkan pada <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\">SECRET_KEY</code></a>, memperbaharui situs anda untuk menggunakan rahasia baru akan menghapus semua sesi yang ada.</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>Tampilan Otentifikasi<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 menyediakan beberapa tampilan yang anda dapat gunakan untuk menangani masuk, keluarm dan pengelolaan sandi. Ini menggunakan dari <a class=\"reference internal\" href=\"#built-in-auth-forms\"><span class=\"std std-ref\">stock auth forms</span></a> tetapi anda dapat melewatkan nya ke dalam formulir anda sendiri juga.</p>\n<p>Django menyediakan tidak ada awalan cetakan untuk tampilan otentifikasi. Anda harus membuat cetakan anda sendiri untuk tampilan anda ingin gunakan. Konteks cetakan adalah terdokumentasi di setiap tampilan, lihat <a class=\"reference internal\" href=\"#all-authentication-views\"><span class=\"std std-ref\">Semua tempilan otentifikasi</span></a>.</p>\n<section id=\"using-the-views\">\n<span id=\"id4\"></span><h4>Menggunakan tamplian<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>Ada perbedaan metode untuk menerapkan tampilan ini di proyek anda. Cara termudah adalah menyertakan URLconf yang disediakan di <code class=\"docutils literal notranslate\">django.contrib.auth.urls</code> dalam URLConf anda sendiri, sebagai contoh:</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>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;accounts/&#39;</span><span class=\"p\">,</span> include<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>Ini akan menyertakan pola URL berikut:</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>accounts<span class=\"o\">/</span>login<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;login&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>logout<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;logout&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>password_change<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_change&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>password_change<span class=\"o\">/</span>done<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_change_done&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>password_reset<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>password_reset<span class=\"o\">/</span>done<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_done&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>reset<span class=\"o\">/&lt;</span>uidb64<span class=\"o\">&gt;/&lt;</span>token<span class=\"o\">&gt;/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_confirm&#39;</span><span class=\"p\">]</span>\naccounts<span class=\"o\">/</span>reset<span class=\"o\">/</span>done<span class=\"o\">/</span> <span class=\"p\">[</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_complete&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Tampilan menyediakan nama URL untuk acuan lebih mudah. Lihat <a class=\"reference internal\" href=\"/id/3.0/topics/http/urls/\"><span class=\"doc\">the URL documentation</span></a> untuk rincian pada menggunakan corak URL bernama.</p>\n<p>Jika anda ingin kendali lebih terhadap URL anda, anda dapat mengacu tampilan khusus di 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=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;change-password/&#39;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>PasswordChangeView<span class=\"o\">.</span>as_view<span class=\"p\">()),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Tampilan mempunyai argumen pilihan anda dapat gunakan untuk merubah kebiasaan dari tampilan. Sebagai contoh, jika anda ingin merubah nama cetakan tampilan kegunaan, anda dapat menyediakan argumen <code class=\"docutils literal notranslate\">template_name</code>. Sebuah cara untuk melakukan ini adalah menyediakan argumen kata kunci dalam URLconf, ini akan dilewatkan ke tampilan. Sebagai contoh:</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>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span>\n        <span class=\"s1\">&#39;change-password/&#39;</span><span class=\"p\">,</span>\n        auth_views<span class=\"o\">.</span>PasswordChangeView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>template_name<span class=\"o\">=</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>Semua tampilan adalah <a class=\"reference internal\" href=\"/id/3.0/topics/class-based-views/\"><span class=\"doc\">class-based</span></a>, yang mengizinkan anda dengan mudah menyesuaikan mereka dengan mensubkelaskan.</p>\n</section>\n<section id=\"all-authentication-views\">\n<span id=\"id5\"></span><h4>Semua tempilan otentifikasi<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>Ini adalah daftar dengan semua tamilan <code class=\"docutils literal notranslate\">django.contrib.auth</code> sediakan. Untuk penerapan rincian lihat <a class=\"reference internal\" href=\"#using-the-views\"><span class=\"std std-ref\">Menggunakan tamplian</span></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LoginView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LoginView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LoginView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">masuk</code></p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/3.0/topics/http/urls/\"><span class=\"doc\">the URL documentation</span></a> untuk rincian pada menggunakan corak URL bernama.</p>\n<p><strong>Atribut</strong></p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama dari cetakan untuk ditampilkan untuk tampilan digunakan untuk pengguna masuk. Awalan ke <code class=\"file docutils literal notranslate\">registration/login.html</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">redirect_field_name</code>: Nama dari bidang <code class=\"docutils literal notranslate\">GET</code> mengandung URL untuk mengalihkan setelah masuk. Awalan ke <code class=\"docutils literal notranslate\">next</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">authentication_form</code>: A callable (typically a form class) to use for\nauthentication. 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\">AuthenticationForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">redirect_authenticated_user</code>: Sebuah boolean yang mengendalikan apakah atau tidak pengguna terotentifikasi mengakses halaman login akan dialihkan ketika mereka telah berhasil masuk. Awalan ke <code class=\"docutils literal notranslate\">False</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Jika anda mengadakan <code class=\"docutils literal notranslate\">redirect_authenticated_user</code>, jaringan situs lainnya akan dapat menentukan jika pengunjung mereka adalah terotentifikasi pada situs anda dengan meminta pengalihan URL ke berkas gambar pada situs jaringan anda. Untuk menghindari ini &quot;<a class=\"reference external\" href=\"https://robinlinus.github.io/socialmedia-leak/\">social media fingerprinting</a>&quot; kebocoran informasi, simpan semua gambar dan favicon anda pada ranah terpisah.</p>\n<p>Enabling <code class=\"docutils literal notranslate\">redirect_authenticated_user</code> can also result in a redirect\nloop when using the <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\">permission_required()</code></a> decorator\nunless the <code class=\"docutils literal notranslate\">raise_exception</code> parameter is used.</p>\n</aside>\n</li>\n<li><p>success_url_allowed_hosts`: <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a> dari rumah, sebagai tambahan pada <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">request.get_host()</code></a>, yang aman untuk pengalihan setelah masuk. Awalan ke <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a> kosong.</p></li>\n</ul>\n<p>Ini adalah apa <code class=\"docutils literal notranslate\">LoginView</code> lakukan:</p>\n<ul class=\"simple\">\n<li><p>Jika dipanggil melalui <code class=\"docutils literal notranslate\">GET</code>, itu menampilkan formulir masuk yang POST ke URL sama.Lebih dari ini dalam bit.</p></li>\n<li><p>Jika dipanggil melalui <code class=\"docutils literal notranslate\">POST</code> dengan pengguna mengajukan surat kepercayaan, itu mencoba untuk masuk pengguna. Jika masuk berhasil, tampilan mengalihkan ke URL ditentukan di <code class=\"docutils literal notranslate\">next</code> tidak menyediakan, itu mengalihkan ke <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_REDIRECT_URL</code></a> (yang awalan menjadi  <code class=\"docutils literal notranslate\">/accounts/profile/</code>). Jika masuk tidak berhasil, itu menampilkan kembali formulir masuk.</p></li>\n</ul>\n<p>Itu adalah tanggung jawab anda untuk menyediakan html untuk cetakan masuk, dipanggil <code class=\"docutils literal notranslate\">registration/login.html</code> secara awalan. Cetakan ini dilewatkan empat cetakan variabel konteks:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">form</code>: Sebuah obyek <a class=\"reference internal\" href=\"/id/3.0/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\">Form</code></a> mewakili <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\">AuthenticationForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">next</code>: URL untuk dialihkan setelah berhasil masuk. Ini mungkin mengandung permintaan string, juga.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site</code>: <code class=\"xref py py-class docutils literal notranslate\">Site`saat ini, menurut pengaturan :setting:`SITE_ID</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke sebuah instance dari <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\">RequestSite</code></a>, yang memperoleh nama situs dan ranah dari <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> saat ini.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Sebuah nama lain untuk <code class=\"docutils literal notranslate\">site.name</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai dari <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. Untuk lebih di situs, lihat <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/sites/\"><span class=\"doc\">Kerangka kerja &quot;sites&quot;</span></a>.</p></li>\n</ul>\n<p>Jika anda memilih tidak memanggil cetakan <code class=\"file docutils literal notranslate\">registration/login.html</code>, anda dapat melewatkan parameter <code class=\"docutils literal notranslate\">template_name</code> melalui argumen tambahan pada metode <code class=\"docutils literal notranslate\">as_view</code> dalam URLConf anda. Sebagai contoh, baris URLconf ini akan menggunakan <code class=\"file docutils literal notranslate\">myapp/login.html</code> sebagai gantinya.</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>path<span class=\"p\">(</span><span class=\"s1\">&#39;accounts/login/&#39;</span><span class=\"p\">,</span> auth_views<span class=\"o\">.</span>LoginView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>template_name<span class=\"o\">=</span><span class=\"s1\">&#39;myapp/login.html&#39;</span><span class=\"p\">)),</span>\n</code></pre></div>\n<p>Anda dapat juga menentukan nama dari bidang <code class=\"docutils literal notranslate\">GET</code> yang mengandung URL untuk mengalihkan setelah masuk menggunakan <code class=\"docutils literal notranslate\">redirect_field_name</code>. Secara awalan, bidang dipanggil <code class=\"docutils literal notranslate\">next</code>.</p>\n<p>Ini adalah sebuah contoh cetakan <code class=\"file docutils literal notranslate\">registration/login.html</code> anda dapat gunakan sebagai titik awalan. Itu menganggap anda memiliki sebuah cetakan <code class=\"file docutils literal notranslate\">base.html</code> yang menentukan sebuah blok <code class=\"docutils literal notranslate\">content</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\">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>Jika anda telah menyesuaiakan autentifikasi (lihat <span class=\"xref std std-doc\">Customizing Authentication 1</span>) anda dapat menggunakan formulir autentifikasi penyesuaian dengan mengatur atribut <code class=\"docutils literal notranslate\">authentication_form</code>. Formulir ini harus menerima sebuah argumen katakunci <code class=\"docutils literal notranslate\">request</code> dalam metode <code class=\"docutils literal notranslate\">__init__()</code> nya dan menyediakan metode <code class=\"docutils literal notranslate\">get_user()</code> yang mengembalikan obyek pengguna terautentifikasi (metode ini hanya dipanggil setelah keberhasilan formulir pengesahan).</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.LogoutView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LogoutView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.LogoutView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Pengguna keluar</p>\n<p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">logout</code></p>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">next_page</code>: URL untuk mengalihkan setelah keluar. Awalan menjadi <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGOUT_REDIRECT_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGOUT_REDIRECT_URL</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari sebuah cetakan setelah pengguna keluar. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/logged_out.html</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">redirect_field_name</code>: Nama dari bidang <code class=\"docutils literal notranslate\">GET</code> mengandung URL untuk mengalihkan ke setelah keluar. Awalan pada <code class=\"docutils literal notranslate\">next</code>. Menimpa URL <code class=\"docutils literal notranslate\">next_page</code> jika parameter <code class=\"docutils literal notranslate\">GET</code> yang diberikan lolos.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">success_url_allowed_hosts</code>: <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a> dari rumah, sebagai tambahan pada  <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">request.get_host()</code></a>, yang aman untuk pengelihan setelah keluar. Awalan pada <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#set\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">set</code></a> kosong.</p></li>\n</ul>\n<p><strong>Kontek cetakan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">title</code>: String &quot;Logged out&quot;, lokalisasi.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site</code>: <code class=\"xref py py-class docutils literal notranslate\">Site`saat ini, menurut pengaturan :setting:`SITE_ID</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke sebuah instance dari <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/sites/#django.contrib.sites.requests.RequestSite\" title=\"django.contrib.sites.requests.RequestSite\"><code class=\"xref py py-class docutils literal notranslate\">RequestSite</code></a>, yang memperoleh nama situs dan ranah dari <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> saat ini.</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Sebuah nama lain untuk <code class=\"docutils literal notranslate\">site.name</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai dari <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. Untuk lebih di situs, lihat <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/sites/\"><span class=\"doc\">Kerangka kerja &quot;sites&quot;</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\">logout_then_login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</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>Pengguna keluar, kemudian mengalihkan ke halaman masuk.</p>\n<p><strong>Nama URL:</strong> Tidak ada URL awal disediakan</p>\n<p><strong>Argumen pilihan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">login_url</code>: URL dari halaman masuk untuk mengalihkan. Awalan menjadi <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> jika tidak diberikan.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordChangeView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_change</code></p>\n<p>Izinkan pengguna merubah sandi mereka.</p>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk digunakan untuk menampilkan formulir rubah sandi. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_change_form.html</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">success_url</code>: The URL to redirect to after a successful password\nchange. Defaults to <code class=\"docutils literal notranslate\">'password_change_done'</code>.</p></li>\n<li><p>form_class`: Formulir &quot;rubah sandi&quot; penyesuaian yang harus menerima sebuah argumen katakunci. Formulir bertanggungjawab untuk sebenarnya merubah sandi pengguna. Awalan pada <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\">PasswordChangeForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n</ul>\n<p><strong>Kontek cetakan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">form</code>: Formulir rubah sandi (lihat <code class=\"docutils literal notranslate\">form_class</code> diatas).</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordChangeDoneView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordChangeDoneView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordChangeDoneView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_change_done</code></p>\n<p>Halaman muncul setelah pengguna telah merubah sandi mereka.</p>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk digunakan. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_change_done.html</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_reset</code></p>\n<p>Mengizinkan seorang pengguna menyetel kembali sandi dengan membangkitkan satu-kali  penggunaan tautan yang dapat digunakan untuk menyetel kembali sandi, dan mengirim tautan itu ke alamat surel pengguna terdaftar.</p>\n<p>Jika alamat sandi disediakan tidak ada dalam sistem, tampilan ini tidak akan mengirim sebuah surel, tetapi pengguna tidak akan menerima pesan kesalahan apapun juga. Ini mencegah kebocoran informasi pada penyerang potensial. Jika anda ingin menyediakan sebuah pesan kesalahan dalam kasus ini, anda dapat mensubkelaskan <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\">PasswordResetForm</code></a> dan menggunakan atribut <code class=\"docutils literal notranslate\">form_class</code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Be aware that sending an email costs extra time, hence you may be\nvulnerable to an email address enumeration timing attack due to a\ndifference between the duration of a reset request for an existing\nemail address and the duration of a reset request for a nonexistent\nemail address. To reduce the overhead, you can use a 3rd party package\nthat allows to send emails asynchronously, e.g. <a class=\"reference external\" href=\"https://pypi.org/project/django-mailer/\">django-mailer</a>.</p>\n</aside>\n<p>Pengguna ditandai dengan sandi tidak digunakan (lihat <a class=\"reference internal\" href=\"/id/3.0/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\">set_unusable_password()</code></a> tidak diizinkan untuk meminta menyetel kembali sandi untuk mencegah penyalahgunaan ketika menggunakan sumber autentifikasi luar seperti LDAP. Catat bahwa mereka tidak akan menerima pesan kesalahan apapun sejak ini akan membuat wujud akun mereka tetapi tidak ada surat akan dikirim juga.</p>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk digunakan untuk menampilkan formulir setel kembali sandi. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_reset_form.html</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">form_class</code>: Formulir yang akan digunakan mendapatkan surel dari pengguna untuk menyetel kembali sandi. Awalan pada <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\">PasswordResetForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">email_template_name</code>: Nama penuh dari cetakan untuk digunakan untuk membangkitkan surel dengan tautan sandi setel kembali. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_reset_email.html</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">subject_template_name</code>: Nama penuh dari cetakan untuk digunakan untuk subyek dari surel dengan tautan sandi setel kembali. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_reset_subject.txt</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token_generator</code>: Instance dari kelas untuk memeriksa tautan satu waktu. Ini akan awalan menjadi <code class=\"docutils literal notranslate\">default_token_generator</code>, itu adalah sebuah instance dari <code class=\"docutils literal notranslate\">django.contrib.auth.tokens.PasswordResetTokenGenerator</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">success_url</code>: The URL to redirect to after a successful password reset\nrequest. Defaults to <code class=\"docutils literal notranslate\">'password_reset_done'</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">from_email</code>: Sebuah alamat surel sah. Secara awalan Django menggunakan <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">html_email_template_name</code>: Nama penuh dari cetakan untuk digunakan untuk membangkitkan sebuah surel banyak bagian <code class=\"docutils literal notranslate\">text/html</code> dengan tautan menyetel kembali sandi. Secara awalan, surel HTML tidak dikirim.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_email_context</code>: A dictionary of context data that will be\navailable in the email template. It can be used to override default\ntemplate context values listed below e.g. <code class=\"docutils literal notranslate\">domain</code>.</p></li>\n</ul>\n<p><strong>Kontek cetakan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">form</code>: Formulir (lihat <code class=\"docutils literal notranslate\">form_class</code> diatas) untuk mengatur kembali sandi pengguna.</p></li>\n</ul>\n<p><strong>Konteks cetakan surel:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">email</code>: Sebuah nama lain untuk <code class=\"docutils literal notranslate\">user.email</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">user</code>: <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> saat ini, menurut pada bidang formulir <code class=\"docutils literal notranslate\">email</code>. Hanya pengguna aktif yang dapa menyetel kembali sandi mereka (<code class=\"docutils literal notranslate\">User.is_active adalah True</code>).</p></li>\n<li><p><code class=\"docutils literal notranslate\">site_name</code>: Sebuah nama lain untuk <code class=\"docutils literal notranslate\">site.name</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai dari <a class=\"reference internal\" href=\"/id/3.0/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META['SERVER_NAME']</code></a>. Untuk lebih di situs, lihat <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/sites/\"><span class=\"doc\">Kerangka kerja &quot;sites&quot;</span></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">domain</code>: Sebuah nama lain untuk <code class=\"docutils literal notranslate\">site.domain</code>. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai dari <code class=\"docutils literal notranslate\">request.get_host()</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">protocol</code>: http atau https</p></li>\n<li><p><code class=\"docutils literal notranslate\">uid</code>: Primary key pengguna disandikan dalam base 64.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token</code>: Token untuk memeriksa bahwa tautan menyetel kembali adalah sah.</p></li>\n</ul>\n<p>Contoh <code class=\"docutils literal notranslate\">registration/password_reset_email.html</code> (cetakan badan email):</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>Konteks cetakan sama digunakan untuk cetakan subyek. Subyek harus berupa strng teks polosbaris tunggal.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetDoneView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetDoneView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetDoneView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_reset_done</code></p>\n<p>Halaman muncul setelah pengguna telah disurelkan sebuah tautan untuk menyetel kembali sandi mereka. Tampilan ini dipanggil sebagai awalan jika <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetView\" title=\"django.contrib.auth.views.PasswordResetView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetView</code></a> tidak mempunyai kumpulan URL <code class=\"docutils literal notranslate\">success_url</code> yang jelas.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Jika alamat surel disediakan tidak ada di sistem, pengguna adalah tidak aktif, atau mempunyai sebuah sandi tidak berguna, pengguna akan masih dialihkan ke tampilan ini tetapi tidak ada surel yang akan dikirim.</p>\n</aside>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk digunakan. Awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_reset_done.html</code> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetConfirmView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetConfirmView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetConfirmView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_reset_confirm</code></p>\n<p>Mengajukan sebuah formulir untuk memasukkan sebuah sandi baru.</p>\n<p><strong>Argumen katakunci dari URL:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">uidb64</code>: id pengguna disandikan dalam base 64.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token</code>: Token untuk memeriksa bahwa sandi adalah sah.</p></li>\n</ul>\n<p><strong>Atribut</strong></p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk memperlihatkan penegasan tampilan sandi. Nilai awalan adalah <code class=\"file docutils literal notranslate\">registration/password_reset_confirm.html</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">token_generator</code>: Instance dari kelas untuk memeriksa sandi. Ini akan awalan menjadi <code class=\"docutils literal notranslate\">default_token_generator</code>, itu adalah sebuah instance dari <code class=\"docutils literal notranslate\">django.contrib.auth.tokens.PasswordResetTokenGenerator</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">post_reset_login</code>: Boolean menunjukkan jika pengguna harus otomatis diatutentifikasi setelah setel kembali sandi berhasil. Awalan pada <code class=\"docutils literal notranslate\">False</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">post_reset_login_backend</code>: Jalur bertitik pada backend autentifikasi untuk menggunakan ketika mengautentifikasi pengguna jika <code class=\"docutils literal notranslate\">post_reset_login</code> adalah <code class=\"docutils literal notranslate\">True</code>. Dibutuhkan hanya jika anda mempunyai banyak <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</code></a> dikonfigurasi. Awalan pada <code class=\"docutils literal notranslate\">None</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">form_class</code>: Formulir yang akan digunakan menyetel sandi. Awalan pada <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\">SetPasswordForm</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">success_url</code>: URL untuk mengalihkan setelah penyetelan kembali sandi selesai. Awalan pada <code class=\"docutils literal notranslate\">'password_reset_complete'</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">reset_url_token</code>: Token parameter displayed as a component of password\nreset URLs. Defaults to <code class=\"docutils literal notranslate\">'set-password'</code>.</p>\n<aside class=\"version-note version-changed\" data-version=\"3.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 3.0</p><p>Atribut kelas <code class=\"docutils literal notranslate\">reset_url_token</code> telah ditambahkan.</p>\n</aside>\n</li>\n</ul>\n<p><strong>Kontek cetakan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">form</code>: Formulir (lihat <code class=\"docutils literal notranslate\">form_class</code> above) untuk pengaturan san pengguna baru.</p></li>\n<li><p><code class=\"docutils literal notranslate\">validlink</code>: Boolean, True jika tautan (perpaduan dari <code class=\"docutils literal notranslate\">uidb64</code> dan <code class=\"docutils literal notranslate\">token</code>) adalah sah atau tidak digunakan.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.PasswordResetCompleteView\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PasswordResetCompleteView</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.PasswordResetCompleteView\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">password_reset_complete</code></p>\n<p>Menghadirkan sebuah tampilan yang menginformasikan pengguna bahwa sandi telah berhasil dirubah.</p>\n<p><strong>Atribut</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: Nama penuh dari cetakan untuk memperlihatkan tampilan. Nilai awalan menjadi <code class=\"file docutils literal notranslate\">registration/password_reset_complete.html</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n</ul>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"helper-functions\">\n<h3>Fungsi pembantu<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\">redirect_to_login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">next</em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</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>Dialihkan ke halaman masuk, dan kemudian kembali ke URL lain setelah berhasil masuk.</p>\n<p><strong>Argumen diwajibkan:</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">next</code>: URL untuk mengalihkan setelah berhasil masuk.</p></li>\n</ul>\n<p><strong>Argumen pilihan</strong></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">login_url</code>: URL dari halaman masuk untuk mengalihkan. Awalan menjadi <a class=\"reference internal\" href=\"/id/3.0/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a> jika tidak diberikan.</p></li>\n<li><p><code class=\"docutils literal notranslate\">redirect_field_name</code>: Nama dari bidang <code class=\"docutils literal notranslate\">GET</code> mengandung URL untuk mengalihkan ke setelah keluar. Menimpa <code class=\"docutils literal notranslate\">next</code> jika parameter <code class=\"docutils literal notranslate\">GET</code> yang diberikan lolos.</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>Formulir siap pakai<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>Jika anda tidak ingin menggunakan tampilan siap-pakai, tetapi ingin dengan meyakinkan tidak menulis formulir untuk kegunaan ini, sistem autentifikasi menyediakan beberapa formulir siap-pakai ditempatkan di <a class=\"reference internal\" href=\"#module-django.contrib.auth.forms\" title=\"django.contrib.auth.forms\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth.forms</code></a>:</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Formulir autentifikasi siap-pakai membuat pendapat tertentu tentang model user yang mereka bekerja dengannya. Jika anda sedang menggunakan sebuah <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">custom user model</span></a>, itu mungkin diperlukan menentukan formulir anda sendiri untuk sistem autentifikasi. Untuk informasi lebih, mengacu pada dokumentasi tentang <a class=\"reference internal\" href=\"/id/3.0/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms\"><span class=\"std std-ref\">using the built-in authentication forms with custom user models</span></a>.</p>\n</aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.forms.AdminPasswordChangeForm\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AdminPasswordChangeForm</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>Sebuah formulir digunakan di antarmuka admin untuk merubah sandi pengguna.</p>\n<p>Mengambil argumen <code class=\"docutils literal notranslate\">user</code> sebagai argumen penempatan pertama.</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\">class</span> </em><span class=\"sig-name descname\">AuthenticationForm</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>Sebuah formulir untuk pengguna masuk.</p>\n<p>Mengambil <code class=\"docutils literal notranslate\">request</code> sebagai argumen penempatan pertama, yang disimpan pada instance formulir untuk digunakan oleh sub-kelas.</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\">confirm_login_allowed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">user</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>Secara awalan, <code class=\"docutils literal notranslate\">AuthenticationForm</code> menolak pengguna yang bendera <code class=\"docutils literal notranslate\">is_active</code> disetel menjadi <code class=\"docutils literal notranslate\">False</code>. Anda mungkin menimpa kebiasaan ini dengan kebijakan penyesuaian untuk menentukan pengguna mana dapat masuk. Lakukan ini dengan formulir penyesuaian yang mensubkelas <code class=\"docutils literal notranslate\">AuthenticationForm</code> dan menimpa metode <code class=\"docutils literal notranslate\">confirm_login_allowed()</code>. Metode ini harus memunculkan <a class=\"reference internal\" href=\"/id/3.0/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> jika pengguna yang diberikan tidak masuk.</p>\n<p>Sebagai contoh, untuk mengizinkan semua pengguna masuk tanpa memperhatikan keadaan &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=\"nn\">django.contrib.auth.forms</span> <span class=\"kn\">import</span> AuthenticationForm\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthenticationFormWithInactiveUsersOkay</span><span class=\"p\">(</span>AuthenticationForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> user<span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<p>(Dalam kasus ini, anda akan butuh menggunakan sebuah backend autentifikasi yang megnzinkan pengguna tidak aktif, seperti <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersModelBackend\" title=\"django.contrib.auth.backends.AllowAllUsersModelBackend\"><code class=\"xref py py-class docutils literal notranslate\">AllowAllUsersModelBackend</code></a>.)</p>\n<p>Atau mengizinkan hanya beberapa pengguna aktif untuk masuk:</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=\"nc\">PickyAuthenticationForm</span><span class=\"p\">(</span>AuthenticationForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">confirm_login_allowed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> user<span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> user<span class=\"o\">.</span>is_active<span class=\"p\">:</span>\n            <span class=\"k\">raise</span> forms<span class=\"o\">.</span>ValidationError<span class=\"p\">(</span>\n                _<span class=\"p\">(</span><span class=\"s2\">&quot;This account is inactive.&quot;</span><span class=\"p\">),</span>\n                code<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> user<span class=\"o\">.</span>username<span class=\"o\">.</span>startswith<span class=\"p\">(</span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> forms<span class=\"o\">.</span>ValidationError<span class=\"p\">(</span>\n                _<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                code<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\">class</span> </em><span class=\"sig-name descname\">PasswordChangeForm</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>Sebuah formulir untuk mengizinkan seorang pengguna merubah sandi mereka.</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\">class</span> </em><span class=\"sig-name descname\">PasswordResetForm</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>Sebuah formulir untuk membangkitkan dan mensurelkan tautan penggunaan satu-kali untuk menyetel kembali sandi pengguna.</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\">send_mail</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">subject_template_name</em>, <em class=\"sig-param\">email_template_name</em>, <em class=\"sig-param\">context</em>, <em class=\"sig-param\">from_email</em>, <em class=\"sig-param\">to_email</em>, <em class=\"sig-param\">html_email_template_name<span class=\"o\">=</span><span class=\"default_value\">None</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>Menggunakan argumen untuk mengirimkan sebuah <code class=\"docutils literal notranslate\">EmailMultiAlternatives</code>. Dapat ditimpa untuk menyesuaikan bagaimana surel dikirim ke pengguna.</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">Parameter<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>subject_template_name</strong> -- cetakan untuk subyek.</p></li>\n<li><p><strong>email_template_name</strong> -- cetakan untuk badan surel.</p></li>\n<li><p><strong>context</strong> -- konteks dilewatkan ke <code class=\"docutils literal notranslate\">subject_template</code>, <code class=\"docutils literal notranslate\">email_template</code>, dan <code class=\"docutils literal notranslate\">html_email_template</code> (jika itu bukan <code class=\"docutils literal notranslate\">None</code>).</p></li>\n<li><p><strong>from_email</strong> -- surel pengirim</p></li>\n<li><p><strong>to_email</strong> -- surel dari peminta.</p></li>\n<li><p><strong>html_email_template_name</strong> -- cetakan untuk badan HTML; awalan menjadi <code class=\"docutils literal notranslate\">None</code>, dimana kasus sebuah surel teks polos dikirim.</p></li>\n</ul>\n</dd>\n</dl>\n<p>Secara awalan, <code class=\"docutils literal notranslate\">save()</code> mengumpulkan <code class=\"docutils literal notranslate\">context</code> dengan variabel sama yang <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetView\" title=\"django.contrib.auth.views.PasswordResetView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetView</code></a> melewatkan ke konteks surelnya.</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\">class</span> </em><span class=\"sig-name descname\">SetPasswordForm</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>Formulir yang membiarkan pengguma merubah sandi mereka tanpa memasukkan sandi lama.</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\">class</span> </em><span class=\"sig-name descname\">UserChangeForm</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>Sebuah formulir digunakan di antarmuka admin untuk merubah infromasi dan perizinan pengguna.</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\">class</span> </em><span class=\"sig-name descname\">UserCreationForm</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>Sebuah <a class=\"reference internal\" href=\"/id/3.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> untuk membuat pengguna baru.</p>\n<p>Itu mempunyai tiga bidang: <code class=\"docutils literal notranslate\">username</code> (dari model user), <code class=\"docutils literal notranslate\">password1</code>, dan <code class=\"docutils literal notranslate\">password2</code>. Itu memeriksa bahwa <code class=\"docutils literal notranslate\">password1</code> dan <code class=\"docutils literal notranslate\">password2</code> cocok, mensahkan sandi menggunakan <a class=\"reference internal\" href=\"/id/3.0/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\">validate_password()</code></a>, dan menyetel sandi pengguna menggunakan <a class=\"reference internal\" href=\"/id/3.0/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\">set_password()</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"authentication-data-in-templates\">\n<h3>Pembuktian keaslian data di cetakan<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>Pengguna masuk saat ini dan perizinan mereka dibuat tersedia di <a class=\"reference internal\" href=\"/id/3.0/ref/templates/api/\"><span class=\"doc\">template context</span></a> ketika anda menggunakan <a class=\"reference internal\" href=\"/id/3.0/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>.</p>\n<aside class=\"admonition-technicality admonition\" role=\"note\">\n<p class=\"admonition-title\">Secara teknis</p>\n<p>Secara teknis, variabel-variabel ini hanya dibuat tersedia di konteks cetakan jika anda menggunakan pengolah konteks <a class=\"reference internal\" href=\"/id/3.0/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> dan <code class=\"docutils literal notranslate\">'django.contrib.auth.context_processors.auth'</code> adalah diadakan. Itu berada di berkas pengaturan dibangkitkan awalan. Untuk lebih, lihat <a class=\"reference internal\" href=\"/id/3.0/ref/templates/api/#subclassing-context-requestcontext\"><span class=\"std std-ref\">RequestContext docs</span></a>.</p>\n</aside>\n<section id=\"users\">\n<h4>Pengguna<a class=\"heading-anchor\" href=\"#users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ketika membangun sebuah cetakan <a class=\"reference internal\" href=\"/id/3.0/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a>, pengguna masuk saat ini, antara instance <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\">User</code></a> atau instance <a class=\"reference internal\" href=\"/id/3.0/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\">AnonymousUser</code></a>, disimpan di variabel cetakan <code class=\"docutils literal notranslate\">{{ user }}</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>Variabel konteks cetakan ini tidak tersedia jika sebuah <code class=\"docutils literal notranslate\">RequestContext</code> tidak sedang digunakan.</p>\n</section>\n<section id=\"permissions\">\n<h4>Hak akses<a class=\"heading-anchor\" href=\"#permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Perizinan pengguna masuk saat ini disimpan di variabel cetakan <code class=\"docutils literal notranslate\">{{ perms }}</code>. Ini adalah sebuah instance dari <code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.PermWrapper</code>, yaitu sebuah proxy cetakan-ramah dari perizinan.</p>\n<p>Menilai pencarian atribut-tunggal dari <code class=\"docutils literal notranslate\">{{ perms }}</code> sebagai boolean adalah wakil pada <a class=\"reference internal\" href=\"/id/3.0/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\">User.has_module_perms()</code></a>. Sebagai contoh, untuk memeriksa jika pengguna masuk mempunyai perizinan apapun dalam aplikasi <code class=\"docutils literal notranslate\">foo</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=\"o\">%</span> <span class=\"k\">if</span> perms<span class=\"o\">.</span>foo <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>Evaluating a two-level-attribute lookup as a boolean is a proxy to\n<a class=\"reference internal\" href=\"/id/3.0/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\">User.has_perm()</code></a>. For example,\nto check if the logged-in user has the permission <code class=\"docutils literal notranslate\">foo.add_vote</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=\"o\">%</span> <span class=\"k\">if</span> perms<span class=\"o\">.</span>foo<span class=\"o\">.</span>add_vote <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>Ini adalah beberapa contoh lengkap dari perizinan pemeriksaan dalam sebuah cetakan:</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.add_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.add_driving</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>Itu memungkinkan juga mencari perizinan dengan pernyataan <code class=\"docutils literal notranslate\">{% if in %}</code>. Sebagai contoh:</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.add_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>Mengelola pengguna di 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>Ketika anda mempunyai kedua <code class=\"docutils literal notranslate\">django.contrib.admin</code> dan <code class=\"docutils literal notranslate\">django.contrib.auth</code> terpasang, admin menyediakan cara yang nyaman untuk menampilkan dan mengelola pengguna, kelompok, dan perizinan. Pengguna dapat dibuat dan dihapus seperti model Django apapun. Kelompok dapat dibuat, dan perizinan dapat diberikan ke pengguna atau kelompok. Sebuah catatan dari pengguna menyunting model dibuat dalam admin juga disimpan dan ditampilkan.</p>\n<section id=\"id6\">\n<h3>Membuat pengguna<a class=\"heading-anchor\" href=\"#id6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Anda harus melihat sebuah tautan pada &quot;Users&quot; di bagian &quot;Auth&quot; dari halaman indeks admin utama. Halaman admin &quot;Add user&quot; adalah berbeda dari halaman admin standar karena itu membutuhkan anda memilis sebuah nama pengguna dan sandi sebelum mengizinkan anda menyunting sisa dari bidang pengguna.</p>\n<p>Juga catat: jika anda ingin seorang akun pengguna dapat membuat pengguna menggunakan situs admin Django, anda akan butuh memberikan mereka perizinan untuk menambahkan pengguna <em>dan</em> merubah pengguna (yaitu, perizinan &quot;Add user&quot; dan &quot;Change user&quot;). Jika sebuah akun mempunyai perizinan untuk menambah pengguna tetapi tidak merubah mereka, yang akun tidak dapat menambah pengguna. Kenapa, Karena jika anda mempunyai perizinan menambahkan pengguna, anda mempunyai kekuasaan membuat superuser, yang dapat kemudian, di gilirannya, rubah pengguna lain. Sehingga Django membuatuhkan tambah <em>dan</em> merubah perizinan sebagai ukuran keamanan sedikit.</p>\n<p>Bijaksanalah tentang bagaimana anda mengizinkan pengguna mengelola perizinan. Jika anda memberikan bukan-superuser kemampuan menyunting pengguna, ini adalah akhirnya sama seperti memberikan mereka keadaan superuser karena mereka akan dapat memperbaiki perizinan dari pengguna menyertakan mereka sendiri!</p>\n</section>\n<section id=\"id7\">\n<h3>Merubah sandi<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sandi pengguna tidak diperlihatkan di admin (maupun disimpan di basisdata), tetapi <a class=\"reference internal\" href=\"/id/3.0/topics/auth/passwords/\"><span class=\"doc\">password storage details</span></a> diperlihatkan. Disertakan di layar dari informasi ini adalah sebuah tautan pada sebuah formulir rubah sandi yang mengizinkan admin merubah sandi pengguna.</p>\n</section>\n</section>","rootId":"using-the-django-authentication-system","toc":[{"title":"Obyek User","anchor":"user-objects","children":[{"title":"Membuat pengguna","anchor":"creating-users","children":[]},{"title":"Membuat pengguna hebat","anchor":"creating-superusers","children":[]},{"title":"Merubah sandi","anchor":"changing-passwords","children":[]},{"title":"Pembuktian keaslian pengguna","anchor":"authenticating-users","children":[]}]},{"title":"Perizinan dan Pembuktian keaslian","anchor":"permissions-and-authorization","children":[{"title":"Perizinan pertama","anchor":"default-permissions","children":[]},{"title":"Kelompok","anchor":"groups","children":[]},{"title":"Pemrograman membuat perizinan","anchor":"programmatically-creating-permissions","children":[]},{"title":"Perizinan penyimpanan sementara","anchor":"permission-caching","children":[]},{"title":"Model proxy","anchor":"proxy-models","children":[]}]},{"title":"Pembuktian keaslian di permintaan Jaringan","anchor":"authentication-in-web-requests","children":[{"title":"Bagaimana cara masuk pengguna","anchor":"how-to-log-a-user-in","children":[{"title":"Memilih backend otentifikasi","anchor":"selecting-the-authentication-backend","children":[]}]},{"title":"Bagaimana cara pengguna keluar","anchor":"how-to-log-a-user-out","children":[]},{"title":"Membatasi akses ke pengguna masuk","anchor":"limiting-access-to-logged-in-users","children":[{"title":"Cara mentah","anchor":"the-raw-way","children":[]},{"title":"Penghias login_required","anchor":"the-login-required-decorator","children":[]},{"title":"Mixin LoginRequired","anchor":"the-loginrequired-mixin","children":[]},{"title":"Membatasi akses ke pengguna masuk yang melewatkan percobaan","anchor":"limiting-access-to-logged-in-users-that-pass-a-test","children":[]},{"title":"Penghias permission_required","anchor":"the-permission-required-decorator","children":[]},{"title":"Mixin PermissionRequiredMixin","anchor":"the-permissionrequiredmixin-mixin","children":[]}]},{"title":"Mengalihkan permintaan tidak sah di tampilan berdasarkan-kelas","anchor":"redirecting-unauthorized-requests-in-class-based-views","children":[{"title":"Penghapusan sesi pada perubahan sandi","anchor":"session-invalidation-on-password-change","children":[]}]},{"title":"Tampilan Otentifikasi","anchor":"module-django.contrib.auth.views","children":[{"title":"Menggunakan tamplian","anchor":"using-the-views","children":[]},{"title":"Semua tempilan otentifikasi","anchor":"all-authentication-views","children":[]}]},{"title":"Fungsi pembantu","anchor":"helper-functions","children":[]},{"title":"Formulir siap pakai","anchor":"module-django.contrib.auth.forms","children":[]},{"title":"Pembuktian keaslian data di cetakan","anchor":"authentication-data-in-templates","children":[{"title":"Pengguna","anchor":"users","children":[]},{"title":"Hak akses","anchor":"permissions","children":[]}]}]},{"title":"Mengelola pengguna di admin","anchor":"managing-users-in-the-admin","children":[{"title":"Membuat pengguna","anchor":"id6","children":[]},{"title":"Merubah sandi","anchor":"id7","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/3.0/topics/"},{"docname":"topics/auth/index","title":"Otentifikasi pengguna di Django","url":"/id/3.0/topics/auth/"}],"prev":{"docname":"topics/auth/index","title":"Otentifikasi pengguna di Django","url":"/id/3.0/topics/auth/"},"next":{"docname":"topics/auth/passwords","title":"Pengelolaan sandi di Django","url":"/id/3.0/topics/auth/passwords/"},"formats":{"html":"/id/3.0/topics/auth/default/","markdown":"/id/3.0/topics/auth/default.md","json":"/id/3.0/topics/auth/default.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/topics/auth/default.txt","official":"https://docs.djangoproject.com/id/3.0/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","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}