{"title":"Menggunakan sistem pembuktian keaslian Django","version":"2.0","locale":"id","docname":"topics/auth/default","url":"/id/2.0/topics/auth/default/","canonical":"https://djangodocs.dev/id/2.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/2.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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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=None</em>, <em class=\"sig-param\">\\**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/2.0/topics/auth/customizing/#authentication-backends\"><span class=\"std std-ref\">authentication backend</span></a>, dan kembalikan obyek <a class=\"reference internal\" href=\"/id/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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=\"version-note version-changed\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 1.11</p><p>Argumen <code class=\"docutils literal notranslate\">request</code> pilihan telah ditambahkan.</p>\n</aside>\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/2.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 datang dengan sistem perizinan sederhana. Dia menyediakan jalan memberikan perizinan ke pengguna dan kelompok khusus dari pengguna.</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 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>Perizinan dapat disetel tidak hanya per jenis dari obyek, tetapi juga per instance obyek tertentu. Dengan menggunakan cara <a class=\"reference internal\" href=\"/id/2.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>, <a class=\"reference internal\" href=\"/id/2.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 <a class=\"reference internal\" href=\"/id/2.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> disediakan oleh kelas <a class=\"reference internal\" href=\"/id/2.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>, itu memungkinkan menyesuaikan perizinan untuk instance obyek berbeda dari jenis sama.</p>\n<p>Obyek <a class=\"reference internal\" href=\"/id/2.0/ref/contrib/auth/#id1\" 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/2.0/ref/contrib/auth/#id1\" 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/2.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>Ketika <code class=\"docutils literal notranslate\">django.contrib.auth</code> terdaftar di pengaturan <a class=\"reference internal\" href=\"/id/2.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> anda, itu akan memastikan bahwa tiga awalan perizinan -- menambah, merubah dan menghapus -- adalah dibuat untuk setiap model Django ditentukan di satu dari aplikasi terpasang anda.</p>\n<p>Perizinan ini akan dibuat ketika anda menjalankan <a class=\"reference internal\" href=\"/id/2.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/2.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/2.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/2.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/2.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</ul>\n<p>Model <a class=\"reference internal\" href=\"/id/2.0/ref/contrib/auth/#id3\" 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/2.0/ref/contrib/auth/#id6\" 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/2.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/2.0/ref/contrib/auth/#id1\" 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/2.0/ref/contrib/auth/#id6\" 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</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/2.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>\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/2.0/topics/http/sessions/\"><span class=\"doc\">sessions</span></a> dan middleware untuk menghubungkan sitem otentifikasi kedalam <a class=\"reference internal\" href=\"/id/2.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/2.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/2.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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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/2.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/2.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>Sederhana, cara mentah untuk membatasi akses ke halaman adalah memeriksa <a class=\"reference internal\" href=\"/id/2.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> dan antara mengalihkan ke halaman 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=\"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/2.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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>Cara termudah untuk menjalankan percobaan anda pada <a class=\"reference internal\" href=\"/id/2.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> di tampilan secara langsung. Sebagai contoh, tampilan ini memeriksa untuk memastikan pengguna mempunyai sebuah surel di ranah yang diinginkan dan jika tidak, dialihkan ke halaman 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=\"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/2.0/ref/contrib/auth/#id1\" 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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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.can_vote&#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>Sama seperti metode <a class=\"reference internal\" href=\"/id/2.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>, nama-nama perizinan mengambil formulir <code class=\"docutils literal notranslate\">&quot;&lt;app label&gt;.&lt;permission codename&gt;&quot;</code> (yaitu <code class=\"docutils literal notranslate\">polls.can_vote</code> untuk perizinan pada model di apliaksi <code class=\"docutils literal notranslate\">polls</code>).</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.can_vote&#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/2.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/2.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/2.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.can_vote&#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/2.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.can_vote&#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.can_open&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;polls.can_edit&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>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/2.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>Untuk memudahkan penanganan dari pembatasan akses di <a class=\"reference internal\" href=\"/id/2.0/ref/class-based-views/\"><span class=\"doc\">class-based views</span></a>, <code class=\"docutils literal notranslate\">AccessMixin</code> dapat digunakan untuk mengalihkan pengguna ke halaman masuk atau menampilkan sebuah tanggapan HTTP 403 Forbidden.</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/2.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>Atribut ini disetel ke``True``, sebuah pengecualian <a class=\"reference internal\" href=\"/id/2.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\">PermissionDenied</code></a> akan dimunculkan daripada mengalihkan. Awalan ke <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.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/2.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/2.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/2.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/2.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/2.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/2.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/2.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<aside class=\"version-note version-changed\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 1.11</p><p>Memutar dari kunci sesi telah ditambahkan.</p>\n</aside>\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/2.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/2.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/2.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/2.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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.login\">\n<span class=\"sig-name descname\">login</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name=`registration/login.html`</em>, <em class=\"sig-param\">redirect_field_name='next'</em>, <em class=\"sig-param\">authentication_form=AuthenticationForm</em>, <em class=\"sig-param\">extra_context=None</em>, <em class=\"sig-param\">redirect_authenticated_user=False</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.views.login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">login</code> harus diganti dengan berdasarkan-kelas <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<p>Argumen-argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">LoginView</code>.</p>\n</dd></dl>\n\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<p><strong>Nama URL:</strong> <code class=\"docutils literal notranslate\">masuk</code></p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/2.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>:Sebuah callable (khususnya hanya kelas formulir) untuk menggunakan otentifikasi. Awalan pada <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/2.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/2.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/2.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/2.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/2.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/2.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/2.0/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; framework</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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.logout\">\n<span class=\"sig-name descname\">logout</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">next_page<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/logged_out.html'</span></em>, <em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em>, <em class=\"sig-param\">extra_context<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\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">logout</code> harus diganti oleh <a class=\"reference internal\" href=\"#django.contrib.auth.views.LogoutView\" title=\"django.contrib.auth.views.LogoutView\"><code class=\"xref py py-class docutils literal notranslate\">LogoutView</code></a> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen-argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">LogoutView</code>.</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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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/2.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/2.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/2.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/2.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/2.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/2.0/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; framework</span></a>.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.logout_then_login\">\n<span class=\"sig-name descname\">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>, <em class=\"sig-param\">extra_context<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/2.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\">extra_context</code>: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.</p></li>\n</ul>\n<aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Parameter <code class=\"docutils literal notranslate\">extra_context</code> tidak digunakan diusangkan dan akan dipindahkan dalam Django 2.1.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_change\">\n<span class=\"sig-name descname\">password_change</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_change_form.html'</span></em>, <em class=\"sig-param\">post_change_redirect<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">password_change_form<span class=\"o\">=</span><span class=\"default_value\">PasswordChangeForm</span></em>, <em class=\"sig-param\">extra_context<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.password_change\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_change</code> harus diganti oleh <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> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordChangeView</code>, kecuali argumen-argumen <code class=\"docutils literal notranslate\">post_change_redirect</code> dan <code class=\"docutils literal notranslate\">password_change_form</code> yang memetakan ke atribut <code class=\"docutils literal notranslate\">success_url</code> dan <code class=\"docutils literal notranslate\">form_class</code> dari tampilan berdasarkan-kelas.</p>\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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>: URL untuk mengalihkan setelah perubahan sandi berhasil.</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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_change_done\">\n<span class=\"sig-name descname\">password_change_done</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_change_done.html'</span></em>, <em class=\"sig-param\">extra_context<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.password_change_done\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_change_done</code> harus diganti oleh <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordChangeDoneView\" title=\"django.contrib.auth.views.PasswordChangeDoneView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordChangeDoneView</code></a> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen-argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordChangeDoneView</code>.</p>\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset\">\n<span class=\"sig-name descname\">password_reset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_form.html'</span></em>, <em class=\"sig-param\">email_template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_email.html'</span></em>, <em class=\"sig-param\">subject_template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_subject.txt'</span></em>, <em class=\"sig-param\">password_reset_form<span class=\"o\">=</span><span class=\"default_value\">PasswordResetForm</span></em>, <em class=\"sig-param\">token_generator<span class=\"o\">=</span><span class=\"default_value\">default_token_generator</span></em>, <em class=\"sig-param\">post_reset_redirect<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">from_email<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">html_email_template_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">extra_email_context<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.password_reset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_reset</code> harus diganti oleh <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> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen pilihan dari tampilan ini mirip pada atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordResetView</code>, kecuali argumen <code class=\"docutils literal notranslate\">post_reset_redirect</code> dan <code class=\"docutils literal notranslate\">password_reset_form</code> yang memetakan ke atribut <code class=\"docutils literal notranslate\">success_url</code> dan <code class=\"docutils literal notranslate\">form_class</code> dari tampilan berdasarkan-kelas.</p>\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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<p>Pengguna ditandai dengan sandi tidak digunakan (lihat <a class=\"reference internal\" href=\"/id/2.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>: URL dialihkan setelah berhasil permintaan setel kembali sandi.</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/2.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>: Sebuah kamus dari data konteks yang akan tersedia di cetakan surel.</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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.0/ref/contrib/sites/\"><span class=\"doc\">The &quot;sites&quot; framework</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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_done\">\n<span class=\"sig-name descname\">password_reset_done</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_done.html'</span></em>, <em class=\"sig-param\">extra_context<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.password_reset_done\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_reset_done</code> harus diganti oleh <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetDoneView\" title=\"django.contrib.auth.views.PasswordResetDoneView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetDoneView</code></a> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen-argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordResetDoneView</code>.</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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_confirm\">\n<span class=\"sig-name descname\">password_reset_confirm</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">uidb64<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">token<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_confirm.html'</span></em>, <em class=\"sig-param\">token_generator<span class=\"o\">=</span><span class=\"default_value\">default_token_generator</span></em>, <em class=\"sig-param\">set_password_form<span class=\"o\">=</span><span class=\"default_value\">SetPasswordForm</span></em>, <em class=\"sig-param\">post_reset_redirect<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">extra_context<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.password_reset_confirm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_reset_confirm</code> harus diganti dengan <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetConfirmView\" title=\"django.contrib.auth.views.PasswordResetConfirmView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetConfirmView</code></a> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen pilihan dari tampilan ini mirip pada atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordResetConfirmView</code> , kecuali argumen <code class=\"docutils literal notranslate\">post_reset_redirect</code> dan <code class=\"docutils literal notranslate\">set_password_form</code> yang memetakan ke atribut <code class=\"docutils literal notranslate\">success_url</code> dan <code class=\"docutils literal notranslate\">form_class</code> dari tampilan berdasarkan-kelas.</p>\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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 class=\"simple\">\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/2.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</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\">set_password_form</code> diatas) untuk mengatur sandi 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 function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.views.password_reset_complete\">\n<span class=\"sig-name descname\">password_reset_complete</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'registration/password_reset_complete.html'</span></em>, <em class=\"sig-param\">extra_context<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.password_reset_complete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Ditinggalkan sejak versi 1.11: </span>Tampilan berdasarkan-fungsi <code class=\"docutils literal notranslate\">password_reset_complete</code> harus diganti dengan <a class=\"reference internal\" href=\"#django.contrib.auth.views.PasswordResetCompleteView\" title=\"django.contrib.auth.views.PasswordResetCompleteView\"><code class=\"xref py py-class docutils literal notranslate\">PasswordResetCompleteView</code></a> berdasarkan-kelas.</p>\n</aside>\n<p>Argumen-argumen pilihan dari tampilan ini mirip pada atribut-atribut berdasarkan-kelas <code class=\"docutils literal notranslate\">PasswordResetCompleteView</code>.</p>\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><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<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/2.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/2.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/2.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/2.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>(Di kasus ini, anda akan juga butuh menggunakan sebuah backend autentifikasi yang mengizinkan pengguna tidak aktif, seperti <a class=\"reference internal\" href=\"/id/2.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/2.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/2.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/2.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/2.0/ref/templates/api/\"><span class=\"doc\">template context</span></a> ketika anda menggunakan <a class=\"reference internal\" href=\"/id/2.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/2.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/2.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/2.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/2.0/ref/contrib/auth/#id1\" 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/2.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/2.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>Menilai penacrian atribua-tingkat-dua sebagai boolean adalah wakil pada <a class=\"reference internal\" href=\"/id/2.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>. Sebagai contoh, untuk memeriksa jika pengguna masuk mempunyai perizinan <code class=\"docutils literal notranslate\">foo.can_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>can_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.can_vote</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can vote!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">perms.foo.can_drive</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You can drive!<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>You don&#39;t have permission to do anything in the foo app.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>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.can_vote&#39;</span> <span class=\"k\">in</span> <span class=\"nv\">perms</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>In lookup works, too.<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"managing-users-in-the-admin\">\n<span id=\"auth-admin\"></span><h2>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/2.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":"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/2.0/topics/"},{"docname":"topics/auth/index","title":"Otentifikasi pengguna di Django","url":"/id/2.0/topics/auth/"}],"prev":{"docname":"topics/auth/index","title":"Otentifikasi pengguna di Django","url":"/id/2.0/topics/auth/"},"next":{"docname":"topics/auth/passwords","title":"Pengelolaan sandi di Django","url":"/id/2.0/topics/auth/passwords/"},"formats":{"html":"/id/2.0/topics/auth/default/","markdown":"/id/2.0/topics/auth/default.md","json":"/id/2.0/topics/auth/default.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/topics/auth/default.txt","official":"https://docs.djangoproject.com/id/2.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"]}