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 ti dimentichi di aggiungerlo a una nuova vista, quella pagina è pubblica.
Il middleware è codice attraversato da ogni richiesta prima di arrivare a una vista; MIDDLEWARE in settings.py lo elenca nell'ordine. LoginRequiredMiddleware reindirizza a LOGIN_URL ogni visitatore che non ha effettuato l'accesso, qualunque pagina abbia richiesto. Legge request.user, quindi viene dopo AuthenticationMiddleware, che lo imposta.
Poi contrassegni le pagine che rimangono pubbliche. Un club per soci lascia gli orari di apertura accessibili a chiunque:
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 si possono rimuovere le righe @login_required.
Sfida
FacileImposta tutte le pagine come private per impostazione predefinita.
- In
settings.py, aggiungi"django.contrib.auth.middleware.LoginRequiredMiddleware"aMIDDLEWARE, nella posizione corretta. - In
notes/views.py, rimuovi le tre righe@login_requirede lasciasignupaccessibile ai visitatori.
Apri / senza aver effettuato l'accesso: verrai reindirizzato alla pagina di accesso e il link Sign up continuerà ad aprire il modulo di registrazione.
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