Menu
CoddyTech

פרטי כברירת מחדל

חלק מהיחידה משתמשים וחשבונות במסלול ה-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.

challenge icon

אתגר

קל

הפכו כל עמוד לפרטי כברירת מחדל.

  1. בקובץ settings.py, הוסיפו את "django.contrib.auth.middleware.LoginRequiredMiddleware" אל MIDDLEWARE, במקום המתאים.
  2. בקובץ 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 = "/"
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משתמשים וחשבונות

תרגלו בעצמכם: Django אונליין