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.
Défi
Facile- Activez
"django.contrib.auth.middleware.LoginRequiredMiddleware"dansMIDDLEWARE, 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 = "/"
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