Menggunakan sistem pembuktian keaslian DjangoLink to this heading
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 extension and customization luas dari otentifikasi.
Otentifikasi Django menyediakan kedua otentifikasi dan otorisasi bersama-sama dan umumnya mengacu pada sebagai sistem otentifikasi, ketika fitur ini agak digabungkan.
Obyek UserLink to this heading
Obyek User 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, 'superusers' atau admin pengguna 'staff' hanya obyek user dengan sekumpulan atribut khusus, bukan kelas-kelas berbeda dari obyek user.
Atribut utama dari pengguna awal adalah:
Lihat :class:`full API documentation <django.contrib.auth.models.User>`untuk acuan penuh, dokumentasi yang mengikuti lebih berorientasi tugas.
Membuat penggunaLink to this heading
Cara paling langsung untuk membuat pengguna adalah menggunakan fungsi pembantu create_user() yang disertakan:
>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
# At this point, user is a User object that has already been saved
# to the database. You can continue to change its attributes
# if you want to change other fields.
>>> user.last_name = 'Lennon'
>>> user.save()
Jika anda mempunai admin Django dipasang, anda dapat juga create users interactively.
Membuat pengguna hebatLink to this heading
Membuat pengguna hebat menggunakan perintah createsuperuser:
$ python manage.py createsuperuser --username=joe --email=joe@example.com
Anda akan diminta untuk sandi. Setelah anda memasukkan satu, pengguna akan membuat dengan segera. Jika anda membiarkan mati pilihan --username atau --email, itu akan meminta anda untuk nilai-nilai tersebut.
Merubah sandiLink to this heading
Django tidak menyimpan sandi (teks bersih) mentah pada model user, tetapi hanya campuran (lihat documentation of how passwords are managed 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.
Untuk merubah sandi pengguna, anda mempunyai beebrapa pilihan:
manage.py changepassword *username* 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.
Anda dapat juga merubah sandi secara program, menggunakan set_password():
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()
Jika anda mempunyai admin Django terpasang, anda dapat juga merubah sandi pengguna pada halaman admin sistem pembuktian keaslian.
Django juga menyediakan views dan forms yang mungkin digunakan untuk mengizinkan pengguna merubah sandi mereka sendiri.
Merubah sandi pengguna akan keluar semua sesi mereka. Lihat Penghapusan sesi pada perubahan sandi untuk rincian.
Pembuktian keaslian penggunaLink to this heading
- authenticate(\**credentials)Link to this definition
Gunakan
authenticate()untuk memeriksa kumpulan dari mandat. Itu mengambil mandat sebagai argumen kata kunci,usernamedanpassworduntuk kasus awal, periksa mereka kembali setiap authentication backend, dan kembalikan obyekUserjika mandat sah untuk backend. Jika mandat tidak sah untuk setiap backend atau jika backend menampilkanPermissionDenied, itu mengembalikanNone. Sebagai contoh:from django.contrib.auth import authenticate user = authenticate(username='john', password='secret') if user is not None: # A backend authenticated the credentials else: # No backend authenticated the credentials
Pembuktian keaslian di permintaan JaringanLink to this heading
Django menggunakan sessions dan middleware untuk menghubungkan sitem otentifikasi kedalam request objects.
Ini menyediakan sebuah atribut request.user pada setiap permintaan yang mewakili pengguna saat ini. Jika pengguna saat ini belum masuk, atribut ini akan disetel ke sebuah instance dari AnonymousUser, sebaliknya itu akan berupa sebuah instance dari User.
Anda dapat memberitahu mereka selain dengan is_authenticated, seperti begitu
if request.user.is_authenticated:
# Do something for authenticated users.
...
else:
# Do something for anonymous users.
...
Bagaimana cara masuk penggunaLink to this heading
Jika anda mempunyai pengguna terotentifikasi anda ingin lampirkan ke sesi saat ini - ini dilakukan dengan fungsi login().
- login(request, user, backend=None)Link to this definition
Untuk pengguna masuk, dari tampilan, gunakan
login(). Itu mengambil sebuah obyekHttpRequestdan sebuah obyekUser.login()menyimpan ID pengguna di sesi, menggunakan kerangka kerja sesi Django.Catat bahwa tiap data disetel selama sesi anonim dipertahankan di sesi setelah pengguna masuk.
Contoh ini menunjukkan bagaimana anda mungkin menggunakan kedua
authenticate()danlogin():from django.contrib.auth import authenticate, login def my_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...
Memilih backend otentifikasiLink to this heading
Ketika seorang pengguna masuk, ID pengguna dan backend yang telah digunakan untuk autentifikasi disimpan dalam sesi pengguna. Ini mengizinkan authentication backend sama untuk mengambil rincian pengguna pada permintaan akan datang. Backend autentifikasi untuk menyimpan sesi dipilih sebagai berikut:
Gunakan nilai dai argumen
backendpilihan, jika disediakan.Gunakan nilai dari atribut
user.backend, jika hadir. Ini mengizinkan memasangkanauthenticate()danlogin():authenticate()menyetel atributuser.backendpada obyek user dia kembalikan.Gunakan
backenddalamAUTHENTICATION_BACKENDS, jika hanya ada satu.Sebaliknya, munculkan sebuah pengecualian.
Di kasus 1 dan 2, nilai dari argumen backend atau atribut user.backend harus di impor bertitik jalur deretan karakter (seperti yang ditemukan di AUTHENTICATION_BACKENDS), bukan kelas backend sebenarnya.
Bagaimana cara pengguna keluarLink to this heading
- logout(request)Link to this definition
Untuk keluar pengguna yang telah masuk melalui
django.contrib.auth.login(), gunakandjango.contrib.auth.logout()dalam tampilan anda. Itu mengambil sebuah obyekHttpRequestdan tidak nilai mempunyai kembalian. Contoh:from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.Catat bahwa
logout()tidak melempar kesalahan apapun jika pengguna tidak masuk.Ketika anda memanggil
logout(), 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 setelah memanggildjango.contrib.auth.logout().
Membatasi akses ke pengguna masukLink to this heading
Cara mentahLink to this heading
Sederhana, cara mentah untuk membatasi akses ke halaman adalah memeriksa request.user.is_authenticated dan antara mengalihkan ke halaman masuk:
from django.conf import settings
from django.shortcuts import redirect
def my_view(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
# ...
...atau menampilkan pesan kesalahan:
from django.shortcuts import render
def my_view(request):
if not request.user.is_authenticated:
return render(request, 'myapp/login_error.html')
# ...
Penghias login_requiredLink to this heading
- login_required(redirect_field_name='next', login_url=None)Link to this definition
Sebagai jalan pintas, anda dapat menggunakan penghias
login_required()yang cocok.from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...login_required()melakukan berikut:Jika pengguna tidak masuk, alihkan ke
settings.LOGIN_URL, melewati jalur mutlak saat ini di permintaan deretan karakter. Contoh:/accounts/login/?next=/polls/3/.Jika pengguna masuk, jalankan tampilan secara biasa. Kode tampilan adalah bebas untuk menganggap pengguna adalah masuk.
Secara awalan, jalur yang pengguna harus dialihkan untuk atas keberhasilan otentifikasi adalah disimpan di permintaan parameter deretan karakter disebut
"next". Jika anda akan memilih menggunakan nama berbeda untuk parameter ini,login_required()mengambil sebuah pilihan parameterredirect_field_name.from django.contrib.auth.decorators import login_required @login_required(redirect_field_name='my_redirect_field') def my_view(request): ...Catat bahwa jika anda menyediakan nilai pada
redirect_field_name, anda akan paling disukai butuh menyesuaikan cetakan masuk anda juga, sejak cetakan varaibel konteks yang menyimpan jalur pengalihan akan menggunakan nilai dariredirect_field_name``sebagai kuncinya daripada ``"next"(awalan).login_required()juga mengambil sebuah pilihan parameterlogin_url. Contoh:from django.contrib.auth.decorators import login_required @login_required(login_url='/accounts/login/') def my_view(request): ...Catat bahwa jika anda tidak menentukan parameter
login_url, anda akan butuh memastikan bahwasettings.LOGIN_URLdan tampilan masuk anda benar terhubung. Sebagai contoh, menggunakan awalan, tambah baris berikut ke URLconf anda:from django.contrib.auth import views as auth_views url(r'^accounts/login/$', auth_views.login),settings.LOGIN_URLjuga menerima nama-nama fungsi tampilan dan named URL patterns. Ini mengizinkan anda secara bebas memetakan kembali ke tampilan masuk anda dalam URLconf tanpa harus memperbaharui pengaturan.
Mixin LoginRequiredLink to this heading
Ketika menggunakan class-based views, anda dapat mencapai kebiasaan lama seperti dengan login_required dengan menggunakan LoginRequiredMixin. Mixin harus di tempat paling kanan di daftar warisan.
- class LoginRequiredMixinLink to this definition
-
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
raise_exception.Anda dapat menyetel tiap dari parameter dari
AccessMixinuntuk menyesuaikan menangani dari pengguna tidak sah:from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin, View): login_url = '/login/' redirect_field_name = 'redirect_to'
Membatasi akses ke pengguna masuk yang melewatkan percobaanLink to this heading
Untuk membatasi akses berdasarkan pada perizinan tertentu atau beberapa percobaan lain, anda akan melakukan pada dasarnya hal sama seperti digambarkan di bagian sebelumnya.
Cara termudah untuk menjalankan percobaan anda pada request.user 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:
from django.shortcuts import redirect
def my_view(request):
if not request.user.email.endswith('@example.com'):
return redirect('/login/?next=%s' % request.path)
# ...
- user_passes_test(test_func, login_url=None, redirect_field_name='next')Link to this definition
Sebagai sebuah jalan pintas, anda dapat menggunakan penghias
user_passes_testyang cocok yang melakukan sebuah pengalihan ketika callable mengembalikanFalse:from django.contrib.auth.decorators import user_passes_test def email_check(user): return user.email.endswith('@example.com') @user_passes_test(email_check) def my_view(request): ...user_passes_test()mengambil argumen wajib: sebuah callable yang mengambil obyekUserdan mengembalikaTruejika pengguna diizinkan melihat halaman. Catat bahwauser_passes_test()tidak secara otomatis memeriksa bahwa theUserbukan anonim.user_passes_test()mengambil dua argumen pilihan:login_urlBiarkan anda menentukan URL yang pengguna tidak melewati percobaan akan dialihkan. Itu mungkin halaman masuk dan awalan ke
settings.LOGIN_URLjika anda tidak menentukan satu.redirect_field_nameSama seperti
login_required(). Atur itu keNonememindahkannya dari URL, yang anda mungkin ingin melakukannya jika anda mengalihkan pengguna yang tidak melewati percobaan ke halaman bukan-masuk dimana tidak ada "next page".
Sebagai contoh:
@user_passes_test(email_check, login_url='/login/') def my_view(request): ...
- class UserPassesTestMixinLink to this definition
-
Ketika menggunakan class-based views, anda dapat menggunakan
UserPassesTestMixinuntuk melakukan ini.- test_func()Link to this definition
Anda harus menimpa metode
test_func()dari kelas untuk menyediakan percobaan yang dilakukan. Lebih lanjut, anda dapat menyetel tiap parameter dariAccessMixinuntuk menyesuaikan penangangan dari pengguna tidak sah:from django.contrib.auth.mixins import UserPassesTestMixin class MyView(UserPassesTestMixin, View): def test_func(self): return self.request.user.email.endswith('@example.com')
- get_test_func()Link to this definition
Anda dapat juga menimpa metode
get_test_func()untuk memiliki penggunaan mixin fungsi bernama berbeda untuk pemeriksaannya (sebagai gantitest_func()).
Penghias permission_requiredLink to this heading
- permission_required(perm, login_url=None, raise_exception=False)Link to this definition
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
permission_required().:from django.contrib.auth.decorators import permission_required @permission_required('polls.can_vote') def my_view(request): ...Sama seperti metode
has_perm(), nama-nama perizinan mengambil formulir"<app label>.<permission codename>"(yaitupolls.can_voteuntuk perizinan pada model di apliaksipolls).Penghias mungkin juga mengambil perizinan berulang, dalam hal ini pengguna harus memiliki semua perizinan untuk mengakses tampilan.
Catat bahwa
permission_required()juga mengambil sebuah pilihan parameterlogin_url:from django.contrib.auth.decorators import permission_required @permission_required('polls.can_vote', login_url='/loginpage/') def my_view(request): ...Ketika di penghias
login_required(), awalanlogin_urlkesettings.LOGIN_URL.Jika parameter
raise_exceptiondiberikan, penghias akan memunculkanPermissionDenied, mendorong the 403 (HTTP Forbidden) view daripada mengalihkan ke halaman masuk.Jika anda ingin menggunakan
raise_exceptiontetapi juga memberikan pengguna anda kesempatan untuk masuk terlebih dahulu, anda dapat menambahkan penghiaslogin_required():from django.contrib.auth.decorators import login_required, permission_required @login_required @permission_required('polls.can_vote', raise_exception=True) def my_view(request): ...
Mixin PermissionRequiredMixinLink to this heading
Untuk memberlakukan pemeriksaan perizinan pada class-based views, anda dapat menggunakan PermissionRequiredMixin:
- class PermissionRequiredMixinLink to this definition
-
Mixin ini, seperti penghias
permission_required, memeriksa apakah pengguna mengakses sebuah tampilan mempunyai semua perizinan yang diberikan. Anda harus menentukan perizinan (atau perulangan dari perizinan) menggunakan parameterpermission_required:from django.contrib.auth.mixins import PermissionRequiredMixin class MyView(PermissionRequiredMixin, View): permission_required = 'polls.can_vote' # Or multiple of permissions: permission_required = ('polls.can_open', 'polls.can_edit')Anda dapat menyetel tiap dari parameter dari
AccessMixinuntuk menyesuaikan menangani dari pengguna tidak sah.Anda dapat juga menimpa metode ini:
- get_permission_required()Link to this definition
Mengembalikan perulangan dari nama perizinan digunakan oleh mixin. Awalan pada atribut
permission_required, dirubah ke sebuah tuple juka memungkinkan.
- has_permission()Link to this definition
Mengembalikan sebuah boolean menunjukkan apakah pengguna saat ini mempunyai perizinan untuk menjalankan tampilan dihiasi. Secara awalan, ini mengembalikan hasil dari memanggil
has_perms()dengan daftar perizinan dikembalikan olehget_permission_required().
Tampilan OtentifikasiLink to this heading
Django menyediakan beberapa tampilan yang anda dapat gunakan untuk menangani masuk, keluarm dan pengelolaan sandi. Ini menggunakan dari stock auth forms tetapi anda dapat melewatkan nya ke dalam formulir anda sendiri juga.
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 Semua tempilan otentifikasi.
Menggunakan tamplianLink to this heading
Ada perbedaan metode untuk menerapkan tampilan ini di proyek anda. Cara termudah adalah menyertakan URLconf yang disediakan di django.contrib.auth.urls dalam URLConf anda sendiri, sebagai contoh:
urlpatterns = [
url('^', include('django.contrib.auth.urls')),
]
Ini akan menyertakan pola URL berikut:
^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']
Tampilan menyediakan nama URL untuk acuan lebih mudah. Lihat the URL documentation untuk rincian pada menggunakan corak URL bernama.
Jika anda ingin kendali lebih terhadap URL anda, anda dapat mengacu tampilan khusus di URLconf:
from django.contrib.auth import views as auth_views
urlpatterns = [
url('^change-password/$', auth_views.password_change),
]
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 template_name. Sebuah cara untuk melakukan ini adalah menyediakan argumen kata kunci dalam URLconf, ini akan dilewatkan ke tampilan. Sebagai contoh:
urlpatterns = [
url(
'^change-password/$',
auth_views.password_change,
{'template_name': 'change-password.html'}
),
]
Semua tampilan mengembalikan sebuah instance TemplateResponse, yang mengizinkan anda dengan mudah menyesuaikan data tanggapan sebelum membangun. Sebuah cara untuk melakukan ini adalah membungkus tampilan di tampilan anda sendiri:
from django.contrib.auth import views
def change_password(request):
template_response = views.password_change(request)
# Do something with `template_response`
return template_response
Untuk lebih rinci, lihat TemplateResponse documentation.
Semua tempilan otentifikasiLink to this heading
Ini adalah daftar dengan semua tamilan django.contrib.auth sediakan. Untuk penerapan rincian lihat Menggunakan tamplian.
- login(request, template_name=`registration/login.html`, redirect_field_name='next', authentication_form=AuthenticationForm, current_app=None, extra_context=None, redirect_authenticated_user=False)Link to this definition
Nama URL:
masukLihat the URL documentation untuk rincian pada menggunakan corak URL bernama.
Argumen pilihan
template_name: Nama dari cetakan untuk ditampilkan untuk tampilan digunakan untuk pengguna masuk. Awalan keregistration/login.html.redirect_field_name: Nama dari bidangGETmengandung URL untuk mengalihkan setelah masuk. Awalan kenext.authentication_form:Sebuah callable (khususnya hanya kelas formulir) untuk menggunakan otentifikasi. Awalan padaAuthenticationForm.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.redirect_authenticated_user: Sebuah boolean yang mengendalikan apakah atau tidak pengguna terotentifikasi mengakses halaman login akan dialihkan ketika mereka telah berhasil masuk. Awalan keFalse.
Ini apa yang
django.contrib.auth.views.loginlakukan:Jika dipanggil melalui
GET, itu menampilkan formulir masuk yang POST ke URL sama.Lebih dari ini dalam bit.Jika dipanggil melalui
POSTdengan pengguna mengajukan surat kepercayaan, itu mencoba untuk masuk pengguna. Jika masuk berhasil, tampilan mengalihkan ke URL ditentukan dinexttidak menyediakan, itu mengalihkan kesettings.LOGIN_REDIRECT_URL(yang awalan menjadi/accounts/profile/). Jika masuk tidak berhasil, itu menampilkan kembali formulir masuk.
Itu adalah tanggung jawab anda untuk menyediakan html untuk cetakan masuk, dipanggil
registration/login.htmlsecara awalan. Cetakan ini dilewatkan empat cetakan variabel konteks:form: Sebuah obyekFormmewakiliAuthenticationForm.next: URL untuk dialihkan setelah berhasil masuk. Ini mungkin mengandung permintaan string, juga.site:Site`saat ini, menurut pengaturan :setting:`SITE_ID. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke sebuah instance dariRequestSite, yang memperoleh nama situs dan ranah dariHttpRequestsaat ini.site_name: Sebuah nama lain untuksite.name. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai darirequest.META['SERVER_NAME']. Untuk lebih di situs, lihat The "sites" framework.
Jika anda memilih tidak memanggil cetakan
registration/login.html, anda dapat melewatkan parametertemplate_namemelalui argumen tambahan pada tampilan di URLconf anda. Sebagai contoh, baris URLconf ini akan menggunakanmyapp/login.htmlsebagai gantinya.url(r'^accounts/login/$', auth_views.login, {'template_name': 'myapp/login.html'}),Anda dapat juga menentukan nama dari bidang
GETyang mengandung URL untuk mengalihkan ke setelah masuk dengan melewatkanredirect_field_nameke tampilan. Secara awalan, bidang dipanggilnext.Ini adalah sebuah contoh cetakan
registration/login.htmlanda dapat gunakan sebagai titik awalan. Itu menganggap anda memiliki sebuah cetakanbase.htmlyang menentukan sebuah blokcontent.{% extends "base.html" %} {% block content %} {% if form.errors %} <p>Your username and password didn't match. Please try again.</p> {% endif %} {% if next %} {% if user.is_authenticated %} <p>Your account doesn't have access to this page. To proceed, please login with an account that has access.</p> {% else %} <p>Please login to see this page.</p> {% endif %} {% endif %} <form method="post" action="{% url 'login' %}"> {% csrf_token %} <table> <tr> <td>{{ form.username.label_tag }}</td> <td>{{ form.username }}</td> </tr> <tr> <td>{{ form.password.label_tag }}</td> <td>{{ form.password }}</td> </tr> </table> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{ next }}" /> </form> {# Assumes you setup the password_reset view in your URLconf #} <p><a href="{% url 'password_reset' %}">Lost password?</a></p> {% endblock %}Jika anda telah menyesuaikan otentifikasi (lihat Customizing Authentication) anda dapat melewatkan penyesuaian formulir otentifikasi ke tampilan masuk melalui parameter
authentication_form. Formulir ini harus menerima sebuah argumen kata kuncirequestdi metode__init__nya, dan menyediakan sebuah metodeget_user()yang mengembalikan obyek user terotentifikasi (metode ini hanya dipanggil setelah pengesahan formulir berhasil).
- logout(request, next_page=None, template_name='registration/logged_out.html', redirect_field_name='next', current_app=None, extra_context=None)Link to this definition
Pengguna keluar
Nama URL:
logoutArgumen pilihan
next_page: URL untuk mengalihkan setelah keluar. Awalan menjadisettings.LOGOUT_REDIRECT_URLjika tidak diberikan.template_name: Nama penuh dari cetakan untuk ditampilkan setelah pengguna keluar. Awalan menjadiregistration/logged_out.htmljika tidak ada argumen diberikanredirect_field_name: Nama dari bidangGETmengandung URL untuk mengalihkan ke setelah keluar. Awalan padanext. Menimpa URLnext_pagejika parameterGETyang diberikan lolos.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
Kontek cetakan
title: String "Logged out", lokalisasi.site:Site`saat ini, menurut pengaturan :setting:`SITE_ID. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke sebuah instance dariRequestSite, yang memperoleh nama situs dan ranah dariHttpRequestsaat ini.site_name: Sebuah nama lain untuksite.name. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai darirequest.META['SERVER_NAME']. Untuk lebih di situs, lihat The "sites" framework.
- logout_then_login(request, login_url=None, current_app=None, extra_context=None)Link to this definition
Pengguna keluar, kemudian mengalihkan ke halaman masuk.
Nama URL: Tidak ada URL awal disediakan
Argumen pilihan
login_url: URL dari halaman masuk untuk mengalihkan. Awalan menjadisettings.LOGIN_URLjika tidak diberikan.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
- password_change(request, template_name='registration/password_change_form.html', post_change_redirect=None, password_change_form=PasswordChangeForm, current_app=None, extra_context=None)Link to this definition
Izinkan pengguna merubah sandi mereka.
Nama URL:
password_changeArgumen pilihan
template_name: Nama penuh dari cetakan untuk digunakan untuk menampilkan formulir rubah sandi. Awalan menjadiregistration/password_change_form.htmljika tidak diberikan.post_change_redirect: URL untuk mengalihkan setelah berhasil merubah sandi.password_change_form: Sebuah penyesuaian formulir "change password" yang harus menerima sebuah argumen katakunciuser. Formulir bertangguna jawab untuk sebenarnya merubah sandi pengguna. Awalan menjadiPasswordChangeForm.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
Kontek cetakan
form: Formulir merubah sandi (lihatpassword_change_formdiatas).
- password_change_done(request, template_name='registration/password_change_done.html', current_app=None, extra_context=None)Link to this definition
Halaman muncul setelah pengguna telah merubah sandi mereka.
Nama URL:
password_change_doneArgumen pilihan
template_name: Nama penuh dari cetakan untuk digunakan. Awalan menjadiregistration/password_change_done.htmljika tidak diberikan.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
- password_reset(request, template_name='registration/password_reset_form.html', email_template_name='registration/password_reset_email.html', subject_template_name='registration/password_reset_subject.txt', password_reset_form=PasswordResetForm, token_generator=default_token_generator, post_reset_redirect=None, from_email=None, current_app=None, extra_context=None, html_email_template_name=None, extra_email_context=None)Link to this definition
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.
Jika alamat surel disediakan tidak ada di sistem, tampilan ini tidak akan mengirim sebuah surel, tetapi pengguna tidak akan menerima pesan kesalahan apapun juga. Ini mencegah kebocoran informasi pada kemungkinan penyerang. Jika anda ingin menyediakan sebuah pesan kesalahan di kasus ini, anda dapat mensubkelaskan
PasswordResetFormdan menggunakan argumenpassword_reset_form.Pengguna ditandai dengan sandi tidak digunakan (lihat
set_unusable_password()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.Nama URL:
password_resetArgumen pilihan
template_name: Nama penuh dari cetakan untuk digunakan untuk menampilkan formulir setel kembali sandi. Awalan menjadiregistration/password_reset_form.htmljika tidak diberikan.email_template_name: Nama penuh dari cetakan untuk digunakan untuk membangkitkan surel dengan tautan sandi setel kembali. Awalan menjadiregistration/password_reset_email.htmljika tidak diberikan.subject_template_name: Nama penuh dari cetakan untuk digunakan untuk subyek dari surel dengan tautan sandi setel kembali. Awalan menjadiregistration/password_reset_subject.txtjika tidak diberikan.password_reset_form: Formulir yang akan digunakan untuk mendapatkan surel dari pengguna untuk menyetel kembali sandu. Awalan menjadiPasswordResetForm.token_generator: Instance dari kelas untuk memeriksa tautan satu waktu. Ini akan awalan menjadidefault_token_generator, itu adalah sebuah instance daridjango.contrib.auth.tokens.PasswordResetTokenGenerator.post_reset_redirect: URL untuk mengalihkan setelah permintaan menyetel kembali sandi berhasil.from_email: Sebuah alamat surel sah. Secara awalan Django menggunakanDEFAULT_FROM_EMAIL.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.html_email_template_name: Nama penuh dari cetakan untuk digunakan untuk membangkitkan sebuah surel banyak bagiantext/htmldengan tautan menyetel kembali sandi. Secara awalan, surel HTML tidak dikirim.extra_email_context: Sebuah kamus dari data konteks yang akan tersedia di cetakan surel.
Kontek cetakan
form: Formulir (lihatpassword_change_formdiatas) untuk menyetel kembali sandi pengguna.
Konteks cetakan surel:
email: Sebuah nama lain untukuser.emailuser:Usersaat ini, menurut pada bidang formuliremail. Hanya pengguna aktif yang dapa menyetel kembali sandi mereka (User.is_active adalah True).site_name: Sebuah nama lain untuksite.name. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai darirequest.META['SERVER_NAME']. Untuk lebih di situs, lihat The "sites" framework.domain: Sebuah nama lain untuksite.domain. Jika anda tidak mempunyai kerangka kerja situs terpasang, ini akan disetel ke nilai darirequest.get_host().protocol: http atau httpsuid: Primary key pengguna disandikan dalam base 64.token: Token untuk memeriksa bahwa tautan menyetel kembali adalah sah.
Contoh
registration/password_reset_email.html(cetakan badan email):Someone asked for password reset for email {{ email }}. Follow the link below: {{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}Konteks cetakan sama digunakan untuk cetakan subyek. Subyek harus berupa strng teks polosbaris tunggal.
- password_reset_done(request, template_name='registration/password_reset_done.html', current_app=None, extra_context=None)Link to this definition
Halaman muncul setelah seorang pengguna telah mensurelkan sebuah tautan untuk menyetel sandi mereka. Tampilan ini dipanggil secara awalan jika tampilan
password_reset()tidak mempunyai sebuah kumpulan URLpost_reset_redirectjelas.Nama URL:
password_reset_doneArgumen pilihan
template_name: Nama penuh dari cetakan untuk digunakan. Awalan menjadiregistration/password_reset_done.htmljika tidak diberikan.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
- password_reset_confirm(request, uidb64=None, token=None, template_name='registration/password_reset_confirm.html', token_generator=default_token_generator, set_password_form=SetPasswordForm, post_reset_redirect=None, current_app=None, extra_context=None)Link to this definition
Mengajukan sebuah formulir untuk memasukkan sebuah sandi baru.
Nama URL:
password_reset_confirmArgumen pilihan
uidb64: Id pengguna disandi dalam base 64. Awalan menjadiNone.token: Token untuk memeriksa bahwa sandi adalah sah. Awalan menjadiNone.template_name: Nama penuh dari cetakan untuk memperlihatkan penegasan tampilan sandi. Nilai awalan adalahregistration/password_reset_confirm.html.token_generator: Instance dari kelas untuk memeriksa sandi. Ini akan awalan menjadidefault_token_generator, itu adalah sebuah instance daridjango.contrib.auth.tokens.PasswordResetTokenGenerator.set_password_form: Formulir yang akan digunakan untuk menyetel sandi. Awalan menjadiSetPasswordForm.post_reset_redirect: URL untuk mengalihkan setelah penyetelan kembali sandi selesai. Awalan menjadiNone.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
Kontek cetakan
form: Formulir (lihatset_password_formdiatas) untuk mengatur sandi pengguna baruvalidlink: Boolean, True jika tautan (perpaduan dariuidb64dantoken) adalah sah atau tidak digunakan.
- password_reset_complete(request, template_name='registration/password_reset_complete.html', current_app=None, extra_context=None)Link to this definition
Menghadirkan sebuah tampilan yang menginformasikan pengguna bahwa sandi telah berhasil dirubah.
Nama URL:
password_reset_completeArgumen pilihan
template_name: Nama penuh dari cetakan untuk memperlihatkan tampilan. Nilai awalan menjadiregistration/password_reset_complete.html.current_app: Sebuah petunjuk mengindikasikan aplikasi mana mengandung tampilaan saat ini. Lihat namespaced URL resolution strategy untuk informasi lebih.extra_context: Sebuah kamus dari data konteks yang akan ditambahkan ke data konteks awalan dilewatkan ke cetakan.
Fungsi pembantuLink to this heading
- redirect_to_login(next, login_url=None, redirect_field_name='next')Link to this definition
Dialihkan ke halaman masuk, dan kemudian kembali ke URL lain setelah berhasil masuk.
Argumen diwajibkan:
next: URL untuk mengalihkan setelah berhasil masuk.
Argumen pilihan
login_url: URL dari halaman masuk untuk mengalihkan. Awalan menjadisettings.LOGIN_URLjika tidak diberikan.redirect_field_name: Nama dari bidangGETmengandung URL untuk mengalihkan ke setelah keluar. Menimpanextjika parameterGETyang diberikan lolos.
Formulir siap pakaiLink to this heading
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 django.contrib.auth.forms:
- class AdminPasswordChangeFormLink to this definition
Sebuah formulir digunakan di antarmuka admin untuk merubah sandi pengguna.
Mengambil argumen
usersebagai argumen penempatan pertama.
- class AuthenticationFormLink to this definition
Sebuah formulir untuk pengguna masuk.
Mengambil
requestsebagai argumen penempatan pertama, yang disimpan pada instance formulir untuk digunakan oleh sub-kelas.- confirm_login_allowed(user)Link to this definition
Secara awalan,
AuthenticationFormmenolak pengguna yang benderais_activedisetel menjadiFalse. Anda mungkin menimpa kebiasaan ini dengan kebijakan penyesuaian untuk menentukan pengguna mana dapat masuk. Lakukan ini dengan formulir penyesuaian yang mensubkelasAuthenticationFormdan menimpa metodeconfirm_login_allowed(). Metode ini harus memunculkanValidationErrorjika pengguna yang diberikan tidak masuk.Sebagai contoh, untuk mengizinkan semua pengguna masuk tanpa memperhatikan keadaan "active":
from django.contrib.auth.forms import AuthenticationForm class AuthenticationFormWithInactiveUsersOkay(AuthenticationForm): def confirm_login_allowed(self, user): pass(Di kasus ini, anda akan juga butuh menggunakan sebuah backend autentifikasi yang mengizinkan pengguna tidak aktif, seperti
AllowAllUsersModelBackend.)Atau mengizinkan hanya beberapa pengguna aktif untuk masuk:
class PickyAuthenticationForm(AuthenticationForm): def confirm_login_allowed(self, user): if not user.is_active: raise forms.ValidationError( _("This account is inactive."), code='inactive', ) if user.username.startswith('b'): raise forms.ValidationError( _("Sorry, accounts starting with 'b' aren't welcome here."), code='no_b_users', )
- class PasswordChangeFormLink to this definition
Sebuah formulir untuk mengizinkan seorang pengguna merubah sandi mereka.
- class PasswordResetFormLink to this definition
Sebuah formulir untuk membangkitkan dan mensurelkan tautan penggunaan satu-kali untuk menyetel kembali sandi pengguna.
- send_mail(subject_template_name, email_template_name, context, from_email, to_email, html_email_template_name=None)Link to this definition
Menggunakan argumen untuk mengirimkan sebuah
EmailMultiAlternatives. Dapat ditimpa untuk menyesuaikan bagaimana surel dikirim ke pengguna.- Parameter:
subject_template_name -- cetakan untuk subyek.
email_template_name -- cetakan untuk badan surel.
context -- konteks dilewatkan ke
subject_template,email_template, danhtml_email_template(jika itu bukanNone).from_email -- surel pengirim
to_email -- surel dari peminta.
html_email_template_name -- cetakan untuk badan HTML; awalan menjadi
None, dimana kasus sebuah surel teks polos dikirim.
Secara awalan,
save()mengumpulkancontextdengan variabel sama yangpassword_reset()melewatkan ke konteks surelnya.
- class SetPasswordFormLink to this definition
Formulir yang membiarkan pengguma merubah sandi mereka tanpa memasukkan sandi lama.
- class UserChangeFormLink to this definition
Sebuah formulir digunakan di antarmuka admin untuk merubah infromasi dan perizinan pengguna.
- class UserCreationFormLink to this definition
Sebuah
ModelFormuntuk membuat pengguna baru.Itu mempunyai tiga bidang:
username(dari model user),password1, danpassword2. Itu memeriksa bahwapassword1danpassword2cocok, mensahkan sandi menggunakanvalidate_password(), dan menyetel sandi pengguna menggunakanset_password().
Pembuktian keaslian data di cetakanLink to this heading
Pengguna masuk saat ini dan perizinan mereka dibuat tersedia di template context ketika anda menggunakan RequestContext.
PenggunaLink to this heading
Ketika membangun sebuah cetakan RequestContext, pengguna masuk saat ini, antara instance User atau instance AnonymousUser, disimpan di variabel cetakan {{ user }}:
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
Variabel konteks cetakan ini tidak tersedia jika sebuah RequestContext tidak sedang digunakan.
Hak aksesLink to this heading
Perizinan pengguna masuk saat ini disimpan di variabel cetakan {{ perms }}. Ini adalah sebuah instance dari django.contrib.auth.context_processors.PermWrapper, yaitu sebuah proxy cetakan-ramah dari perizinan.
Di obyek {{ perms }}, pencarian atribut-tunggal adalah sebuah proxy pada User.has_module_perms. Contoh ini akan menampilkan True jika pengguna masuk mempunyai perizinan apapun di aplikasi foo:
{{ perms.foo }}
Pencarian atribut-tingkat-dua adalah sebuah proxy pada User.has_perm. Contoh ini akan menampilkan True jika pengguna masuk mempunyai perizinan foo.can_vote:
{{ perms.foo.can_vote }}
Demikian, anda dapat memeriksa perizinan di cetakan pernyataan {% if %}:
{% if perms.foo %}
<p>You have permission to do something in the foo app.</p>
{% if perms.foo.can_vote %}
<p>You can vote!</p>
{% endif %}
{% if perms.foo.can_drive %}
<p>You can drive!</p>
{% endif %}
{% else %}
<p>You don't have permission to do anything in the foo app.</p>
{% endif %}
Itu memungkinkan juga mencari perizinan dengan pernyataan {% if in %}. Sebagai contoh:
{% if 'foo' in perms %}
{% if 'foo.can_vote' in perms %}
<p>In lookup works, too.</p>
{% endif %}
{% endif %}
Mengelola pengguna di adminLink to this heading
Ketika anda mempunyai kedua django.contrib.admin dan django.contrib.auth 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.
Membuat penggunaLink to this heading
Anda harus melihat sebuah tautan pada "Users" di bagian "Auth" dari halaman indeks admin utama. Halaman admin "Add user" adalah berbeda dari halaman admin standar karena itu membutuhkan anda memilis sebuah nama pengguna dan sandi sebelum mengizinkan anda menyunting sisa dari bidang pengguna.
Juga catat: jika anda ingin seorang akun pengguna dapat membuat pengguna menggunakan situs admin Django, anda akan butuh memberikan mereka perizinan untuk menambahkan pengguna dan merubah pengguna (yaitu, perizinan "Add user" dan "Change user"). 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 dan merubah perizinan sebagai ukuran keamanan sedikit.
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!
Merubah sandiLink to this heading
Sandi pengguna tidak diperlihatkan di admin (maupun disimpan di basisdata), tetapi password storage details diperlihatkan. Disertakan di layar dari informasi ini adalah sebuah tautan pada sebuah formulir rubah sandi yang mengizinkan admin merubah sandi pengguna.