Menu
CoddyTech

קבצים סטטיים לסביבת ייצור

חלק מהיחידה ממשקי API של JSON במסלול ה-Django של Coddy. שיעור 19 מתוך 19.

בסביבת ייצור, תוכנית כמו Gunicorn מריצה את Django במקום runserver, והיא אינה מגישה קבצים סטטיים כמו app.js. הם מוגשים מתיקייה אחת, על ידי שרת האינטרנט או חבילה כמו WhiteNoise.

התיקייה הזו היא STATIC_ROOT, נתיב מוחלט. הפקודה python manage.py collectstatic מעתיקה אליה את קובצי static/ של כל אפליקציה, ויש להריץ אותה בכל פריסה. בלי STATIC_ROOT התהליך נעצר עם ImproperlyConfigured.

הנתיבים בהגדרות נבנים מתוך BASE_DIR, התיקייה שמכילה את manage.py, באמצעות האופרטור / של pathlib. התיקייה לקבצים שמבקרים מעלים:

MEDIA_ROOT = BASE_DIR / "uploads"

לפני העלייה לאוויר, הפקודה python manage.py check --deploy מציגה הגדרות שעדיין אינן מוכנות.

challenge icon

אתגר

קל

ב־mysite/settings.py, מתחת ל־STATIC_URL, הגדר את STATIC_ROOT לתיקייה staticfiles שלצד manage.py, כנתיב מוחלט.

לחץ על Run, ואז בכרטיסייה Shell: הפקודה from django.core.management import call_command; call_command("collectstatic", interactive=False) מדפיסה כמה קבצים היא העתיקה.

נסו בעצמכם

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "django-insecure-change-me")
DEBUG = os.environ.get("DJANGO_DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost,127.0.0.1").split(",")

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "tasks",
]

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",
    }
}

LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True

STATIC_URL = "static/"
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה ממשקי API של JSON

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