Python 现代开发学习笔记

(二十五)静态文件收集与部署设置

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 观察页面。

部署配置先确定密钥域名和数据位置,migrate 调整表,collectstatic 生成清单与文件,最后服务加载 application 并由静态服务提供资源

笔记正文与全部题解 · Ctrl / ⌘ K