Pribadi secara Default
Termasuk bagian Pengguna dan Akun dalam perjalanan Django di Coddy. Pelajaran 7 dari 16.
Aplikasi catatan bersifat pribadi: hampir tidak ada yang boleh diakses pengunjung. Jika kamu memasang @login_required di setiap view, suatu hari kamu mungkin lupa memasangnya di view baru, sehingga halaman itu menjadi publik.
Middleware adalah kode yang dilewati setiap request sebelum sampai ke view; MIDDLEWARE di settings.py mencantumkannya secara berurutan. LoginRequiredMiddleware mengarahkan setiap pengunjung yang belum masuk ke LOGIN_URL, halaman apa pun yang mereka minta. Middleware ini membaca request.user, jadi letakkan setelah AuthenticationMiddleware, yang menetapkannya.
Lalu, tandai halaman yang tetap publik. Klub anggota membiarkan jam buka mereka dapat dilihat siapa saja:
from django.contrib.auth.decorators import login_not_required
@login_not_required
def opening_hours(request):
return render(request, "club/hours.html")Halaman login Django sudah ditandai. Kini setiap view lainnya dilindungi, jadi baris @login_required bisa dihapus.
Tantangan
Mudah- Aktifkan
"django.contrib.auth.middleware.LoginRequiredMiddleware"diMIDDLEWARE, pada tempat yang tepat. - Hapus tiga baris
@login_required. - Pengunjung tetap bisa membuka
/signup/dan membuat akun.
Tekan Jalankan: / akan membuka halaman login. Lalu ikuti tautan Daftar.
Coba sendiri
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = "django-insecure-change-me"
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"notes",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "mysite.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
AUTH_PASSWORD_VALIDATORS = [
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengguna dan Akun
Latihan sendiri: Playground Django