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 en ella los archivos static/ de cada aplicación, y debes ejecutar 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. La carpeta para los archivos que suben los visitantes:

MEDIA_ROOT = BASE_DIR / "uploads"

Antes de ponerlo en producción, python manage.py check --deploy muestra las opciones de configuración que no están listas.

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.

Pulsa Run y, después, en la pestaña Shell: from django.core.management import call_command; call_command("collectstatic", interactive=False) muestra cuántos archivos copió.

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