Menu
CoddyTech

Tệp tĩnh cho môi trường production

Thuộc phần API JSON trong hành trình Django của Coddy. Bài học 19 trên 19.

Trong môi trường sản xuất, một chương trình như Gunicorn chạy Django thay cho runserver, và chương trình này không phục vụ các tệp tĩnh như app.js. Máy chủ web hoặc một package như WhiteNoise sẽ phục vụ các tệp đó từ một thư mục duy nhất.

Thư mục đó là STATIC_ROOT, một đường dẫn tuyệt đối. python manage.py collectstatic sao chép tệp static/ của mọi ứng dụng vào thư mục này, và bạn chạy lệnh đó mỗi lần triển khai. Nếu không có STATIC_ROOT, lệnh sẽ dừng và báo lỗi ImproperlyConfigured.

Các đường dẫn trong phần cài đặt được tạo từ BASE_DIR, thư mục chứa manage.py, bằng toán tử / của pathlib. Một thư mục dành cho các bản xuất của trang web:

EXPORTS_DIR = BASE_DIR / "data" / "exports"

Trước khi đưa trang web vào hoạt động, python manage.py check --deploy liệt kê các mục cài đặt chưa sẵn sàng.

challenge icon

Thử thách

Dễ

Trong mysite/settings.py, bên dưới STATIC_URL, hãy đặt STATIC_ROOT thành thư mục staticfiles nằm cạnh manage.py, dưới dạng đường dẫn tuyệt đối.

Chạy dòng bên dưới trong thẻ Shell: dòng lệnh này in ra một dòng như 127 static files copied, phần lớn là các tệp của trang quản trị, trong đó có tasks/app.js.

from django.core.management import call_command; call_command("collectstatic", interactive=False)

Tự làm thử

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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong API JSON

Tự luyện tập: Playground Django