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

אתגר

קל
  • הפעילו את "django.contrib.auth.middleware.LoginRequiredMiddleware" בתוך MIDDLEWARE, במקום המתאים.
  • הסירו את שלוש השורות של @login_required.
  • מבקר עדיין יכול לפתוח את /signup/ וליצור חשבון.

לחצו על Run: / נפתח בדף הכניסה. לאחר מכן היכנסו דרך הקישור להרשמה.

נסו בעצמכם

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 אונליין