Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Imposta tutte le pagine come private per impostazione predefinita.

  1. In settings.py, aggiungi "django.contrib.auth.middleware.LoginRequiredMiddleware" a MIDDLEWARE, nella posizione corretta.
  2. In notes/views.py, rimuovi le tre righe @login_required e lascia signup accessibile 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 = "/"
quiz iconMettiti alla prova

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