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.
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.
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/"
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