Privato per impostazione predefinita
Fa parte della sezione Utenti e account del percorso Django di Coddy. Lezione 7 di 16.
Un'app per le note è privata: quasi nulla dovrebbe essere accessibile ai visitatori. Con @login_required su ogni vista, il giorno in cui te ne dimentichi in una nuova vista, quella pagina è pubblica.
Il middleware è codice attraversato da ogni richiesta nel suo percorso verso una vista; MIDDLEWARE in settings.py lo elenca nell'ordine. LoginRequiredMiddleware reindirizza a LOGIN_URL ogni visitatore che non ha effettuato l'accesso, qualunque sia la pagina richiesta. Legge request.user, quindi va inserito dopo AuthenticationMiddleware, che lo imposta.
Poi contrassegni le pagine che devono rimanere pubbliche. Un club per i soci tiene gli orari di apertura accessibili a tutti:
from django.contrib.auth.decorators import login_not_required
@login_not_required
def opening_hours(request):
return render(request, "club/hours.html")La pagina di accesso di Django è già contrassegnata. Ora tutte le altre viste sono protette, quindi le righe @login_required possono essere rimosse.
Sfida
Facile- Attiva
"django.contrib.auth.middleware.LoginRequiredMiddleware"inMIDDLEWARE, nella posizione corretta. - Rimuovi le tre righe
@login_required. - Un visitatore può ancora aprire
/signup/e creare un account.
Premi Esegui: / si apre sulla pagina di accesso. Poi segui il link Iscriviti.
Provalo tu
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 = "/"
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Utenti e account
Esercitati da solo: Playground Django