פרטי כברירת מחדל
חלק מהיחידה משתמשים וחשבונות במסלול ה-Django של Coddy. שיעור 7 מתוך 16.
אפליקציה לרישום הערות היא פרטית: כמעט שום דבר בה לא אמור להיות פתוח למבקרים. אם מוסיפים @login_required לכל תצוגה, ביום שבו תשכחו להוסיף אותו לתצוגה חדשה, הדף הזה יהיה ציבורי.
תווכה היא קוד שכל בקשה עוברת דרכו בדרכה לתצוגה; הקובץ MIDDLEWARE ב־settings.py מפרט את התווכות לפי הסדר. LoginRequiredMiddleware מפנה כל מבקר שאינו מחובר אל LOGIN_URL, בלי קשר לדף שביקש. הוא קורא את request.user, ולכן הוא צריך לבוא אחרי AuthenticationMiddleware, שמגדיר אותו.
לאחר מכן מסמנים את הדפים שנשארים ציבוריים. מועדון חברים משאיר את שעות הפתיחה שלו פתוחות לכולם:
from django.contrib.auth.decorators import login_not_required
@login_not_required
def opening_hours(request):
return render(request, "club/hours.html")דף ההתחברות של Django כבר מסומן. כעת כל תצוגה אחרת מוגנת, ולכן אפשר להסיר את שורות @login_required.
אתגר
קלהפכו כל עמוד לפרטי כברירת מחדל.
- בקובץ
settings.py, הוסיפו את"django.contrib.auth.middleware.LoginRequiredMiddleware"אלMIDDLEWARE, במקום המתאים. - בקובץ
notes/views.py, הסירו את שלוש השורות של@login_required, והשאירו אתsignupפתוחה למבקרים.
פתחו את / כשאתם מנותקים: תגיעו לדף ההתחברות, והקישור Sign up עדיין יפתח את טופס ההרשמה.
נסו בעצמכם
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 = "/"
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה משתמשים וחשבונות
תרגלו בעצמכם: Django אונליין