Menu
CoddyTech

Privé par défaut

Fait partie de la section Utilisateurs et comptes du Journey Django de Coddy. Leçon 7 sur 16.

Une application de notes est privée : presque rien ne devrait être accessible aux visiteurs. Avec @login_required sur chaque vue, le jour où vous l’oublierez sur une nouvelle vue, cette page sera publique.

Un intergiciel est du code par lequel passe chaque requête avant d’atteindre une vue ; MIDDLEWARE dans settings.py en répertorie les éléments dans l’ordre. LoginRequiredMiddleware redirige vers LOGIN_URL chaque visiteur qui n’est pas connecté, quelle que soit la page demandée. Il lit request.user ; il doit donc être placé après AuthenticationMiddleware, qui définit cet attribut.

Vous indiquez ensuite les pages qui restent publiques. Un club réservé à ses membres laisse ses horaires d’ouverture accessibles à tous :

from django.contrib.auth.decorators import login_not_required


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

La page de connexion de Django est déjà marquée comme publique. Toutes les autres vues sont désormais protégées, vous pouvez donc supprimer les lignes @login_required.

challenge icon

Défi

Facile
  • Activez "django.contrib.auth.middleware.LoginRequiredMiddleware" dans MIDDLEWARE, au bon endroit.
  • Supprimez les trois lignes @login_required.
  • Un visiteur peut toujours ouvrir /signup/ et créer un compte.

Cliquez sur Exécuter : / s’ouvre sur la page de connexion. Suivez ensuite le lien d’inscription.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Utilisateurs et comptes

Entraînez-vous par vous-même : Playground Django