(二十五)静态文件收集与部署设置
1. 开发查找与部署目录
开发服务根据应用中的 static/library/style.css 提供样式;部署时 collectstatic 把各应用的静态资源集中到 STATIC_ROOT,包括本站样式和管理后台资源。数据库迁移、静态收集与服务启动分别负责不同工作。
# 收集到实例目录的 staticfiles,--noinput 不再逐项询问。
uv run python manage.py collectstatic --noinput
{% static %} 根据静态存储配置生成路径。部署配置使用清单存储,收集时生成带内容摘要的文件名,模板据此引用;静态服务器再提供这些文件。
2. 用独立配置表达部署差异
# 项目文件:reading_project/src/reading_site/settings_production.py
# 先复用基础设置,再覆盖部署差异;星号导入复制基础模块中的设置名称。
import os
from .settings import * # noqa: F403
DEBUG = False
SECRET_KEY = os.environ["READING_SECRET_KEY"]
ALLOWED_HOSTS = [
value.strip()
for value in os.environ["READING_ALLOWED_HOSTS"].split(",")
if value.strip()
]
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = SECURE_HSTS_PRELOAD = True
STORAGES = {
"staticfiles": {
"BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
}
}DEBUG=False 关闭调试页面;域名与密钥从环境读取。HTTPS 配置让会话和 CSRF Cookie 随加密连接发送,HSTS 响应告诉浏览器后续继续使用 HTTPS。代理和 WSGI/ASGI 服务的外部地址、TLS 与静态目录也要和这些设置对应。
部署前按实际设置执行:
# 环境已提供 READING_SECRET_KEY、READING_ALLOWED_HOSTS 和 READING_INSTANCE。
uv run python manage.py check --deploy --settings=reading_site.settings_production
uv run python manage.py migrate --settings=reading_site.settings_production
uv run python manage.py collectstatic --noinput --settings=reading_site.settings_production
check --deploy 核对这份配置,随后从实际外部地址检查页面、HTTPS 和静态资源。配置项目可查 Django 部署检查。
# 项目文件:reading_project/src/reading_site/wsgi.py
# 把 Django 设置模块交给 WSGI 入口,服务器据此载入应用并处理同步请求。
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "reading_site.settings")
application = get_wsgi_application()# 项目文件:reading_project/src/reading_site/asgi.py
# 把 Django 设置模块交给 ASGI 入口,服务器据此载入支持异步协议的应用。
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "reading_site.settings")
application = get_asgi_application()两个入口分别取得 WSGI 与 ASGI 应用,服务进程通过设置模块初始化同一项目。部署时先选择设置模块,再把相应 application 交给服务器;本机演示仍用 runserver 观察页面。