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.
Desafío
FácilEn 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/"
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de API JSON
2Lectura de solicitudes
Filtrar con una consultaCrear con POST5Proyecto: Organizar el trabajo
Proyecto: PrioridadesProyecto: Borrar las tareas completadasPractica por tu cuenta: Playground de Django