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. תיקייה לייצוא נתונים של האתר:

EXPORTS_DIR = BASE_DIR / "data" / "exports"

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

challenge icon

אתגר

קל

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

הריצו את השורה שלהלן בלשונית Shell: היא מדפיסה שורה כגון 127 static files copied, רובם של ממשק הניהול, וביניהם tasks/app.js.

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