Menu
CoddyTech

Archivos estáticos para producción

Parte de la sección API JSON del Journey de Django de Coddy. Lección 19 de 19.

En producción, un programa como Gunicorn ejecuta Django en lugar de runserver, y no sirve archivos estáticos como app.js. Estos se sirven desde una carpeta mediante el servidor web o un paquete como WhiteNoise.

Esa carpeta es STATIC_ROOT, una ruta absoluta. python manage.py collectstatic copia los archivos static/ de cada aplicación en ella, y ejecutas el comando en cada despliegue. Sin STATIC_ROOT, se detiene con ImproperlyConfigured.

Las rutas de la configuración se construyen a partir de BASE_DIR, la carpeta que contiene manage.py, con el operador / de pathlib. Una carpeta para las exportaciones del sitio:

EXPORTS_DIR = BASE_DIR / "data" / "exports"

Antes de ponerlo en marcha, python manage.py check --deploy enumera los ajustes que no están listos.

challenge icon

Desafío

Fácil

En mysite/settings.py, debajo de STATIC_URL, establece STATIC_ROOT en la carpeta staticfiles junto a manage.py, como una ruta absoluta.

Ejecuta la línea de abajo en la pestaña Shell: imprime una línea como 127 static files copied, la mayoría de ellos pertenecientes al sitio de administración, entre ellos tasks/app.js.

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

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de API JSON

Practica por tu cuenta: Playground de Django