Menu
CoddyTech

Privado de forma predeterminada

Parte de la sección Usuarios y cuentas del Journey de Django de Coddy. Lección 7 de 16.

Una aplicación de notas es privada: casi nada debería estar abierto a los visitantes. Si usas @login_required en cada vista, el día que se te olvide en una vista nueva, esa página será pública.

El middleware es código por el que pasa cada solicitud de camino a una vista; MIDDLEWARE en settings.py lo enumera en orden. LoginRequiredMiddleware envía a LOGIN_URL a todos los visitantes que no hayan iniciado sesión, sea cual sea la página que hayan solicitado. Lee request.user, así que va después de AuthenticationMiddleware, que es quien lo establece.

Después, marcas las páginas que siguen siendo públicas. Un club de socios mantiene su horario de apertura disponible para cualquiera:

from django.contrib.auth.decorators import login_not_required


@login_not_required
def opening_hours(request):
    return render(request, "club/hours.html")

La página de inicio de sesión de Django ya está marcada. Ahora todas las demás vistas están protegidas, así que puedes eliminar las líneas @login_required.

challenge icon

Desafío

Fácil
  • Activa "django.contrib.auth.middleware.LoginRequiredMiddleware" en MIDDLEWARE, en el lugar adecuado.
  • Elimina las tres líneas @login_required.
  • Un visitante aún puede abrir /signup/ y crear una cuenta.

Pulsa Ejecutar: / se abre en la página de inicio de sesión. Después, sigue el enlace Registrarse.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Usuarios y cuentas

Practica por tu cuenta: Playground de Django