Standardmäßig privat
Teil des Abschnitts Benutzer und Konten der Django-Journey von Coddy. Lektion 7 von 16.
Eine Notizen-App ist privat: Fast nichts sollte für Besucher zugänglich sein. Wenn du bei jeder View @login_required verwendest, ist die Seite öffentlich, sobald du es bei einer neuen View einmal vergisst.
Middleware ist Code, den jede Anfrage auf dem Weg zu einer View durchläuft; MIDDLEWARE in settings.py listet sie in der richtigen Reihenfolge auf. LoginRequiredMiddleware leitet jeden Besucher, der nicht angemeldet ist, zu LOGIN_URL weiter, unabhängig davon, welche Seite er aufgerufen hat. Sie liest request.user aus und muss daher nach AuthenticationMiddleware kommen, das diesen Wert setzt.
Dann markierst du die Seiten, die öffentlich bleiben. Ein Mitgliederclub hält seine Öffnungszeiten für alle zugänglich:
from django.contrib.auth.decorators import login_not_required
@login_not_required
def opening_hours(request):
return render(request, "club/hours.html")Djangos Anmeldeseite ist bereits gekennzeichnet. Alle anderen Views sind jetzt geschützt, deshalb können die Zeilen mit @login_required entfernt werden.
Aufgabe
Einfach- Aktiviere
"django.contrib.auth.middleware.LoginRequiredMiddleware"an der richtigen Stelle inMIDDLEWARE. - Entferne die drei Zeilen mit
@login_required. - Besucher können weiterhin
/signup/öffnen und ein Konto erstellen.
Klicke auf „Ausführen“: / öffnet sich auf der Anmeldeseite. Folge dann dem Link zur Registrierung.
Probier es selbst
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 = "/"
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Benutzer und Konten
Übe selbstständig: Django-Playground