一、生产环境配置开发环境中DEBUGTrueDjango 会显示详细的错误信息和调试页面。生产环境中必须关闭DEBUG并正确配置安全选项。python# 文件路径blog_project/settings.py import os # 安全密钥从环境变量读取不要硬编码在代码中 SECRET_KEY os.environ.get(SECRET_KEY, 开发环境默认密钥) # DEBUG 通过环境变量控制 DEBUG os.environ.get(DEBUG, True).lower() true # 允许访问的主机名 ALLOWED_HOSTS os.environ.get(ALLOWED_HOSTS, 127.0.0.1,localhost).split(,) # 静态文件收集目录 STATIC_ROOT os.path.join(BASE_DIR, staticfiles) STATIC_URL /static/配置项解析配置项开发环境生产环境SECRET_KEY可硬编码从环境变量读取DEBUGTrueFalseALLOWED_HOSTS[]或[localhost]必须配置域名STATIC_ROOT不需要必须配置重要提醒SECRET_KEY是 Django 最重要的安全密钥用于加密 session、CSRF token 等。绝对不能硬编码在代码中或提交到 Git。生产环境中通过环境变量注入。代码解析os.environ.get(DEBUG, True).lower() true从环境变量读取DEBUG默认True。字符串True转小写后与true比较得到布尔值。.split(,)将逗号分隔的字符串转为列表方便配置多个域名。二、依赖管理与 requirements.txt生成依赖列表部署平台用它来安装项目所需的包。bash(venv) $ pip freeze requirements.txt检查文件内容确保包含以下关键依赖textDjango5.0,6.0 gunicorn21.0 # 生产级 WSGI 服务器 whitenoise6.0 # 静态文件服务可选如果没有 gunicorn先安装bash(venv) $ pip install gunicorn (venv) $ pip freeze requirements.txt各依赖的作用包名作用DjangoWeb 框架本体gunicorn生产级 WSGI 服务器替代runserverwhitenoise让 Gunicorn 直接提供静态文件服务三、配置 Gunicorn WhitenoiseDjango 自带的runserver不适合生产环境。Gunicorn是 Python 生产级 WSGI 服务器处理并发请求。Whitenoise让 Gunicorn 能直接提供静态文件服务CSS、JS、图片。python# 文件路径blog_project/settings.py # Whitenoise 中间件必须放在 SecurityMiddleware 之后其他中间件之前 MIDDLEWARE [ django.middleware.security.SecurityMiddleware, whitenoise.middleware.WhiteNoiseMiddleware, # 新增静态文件中间件 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, ]Whitenoise 中间件的顺序要求textSecurityMiddleware → WhiteNoiseMiddleware → 其他所有中间件必须放在SecurityMiddleware之后、其他中间件之前否则静态文件可能无法正常服务。在项目根目录创建 Procfiletextweb: gunicorn blog_project.wsgi --log-file -Procfile 解析部分含义web:声明这是一个 Web 服务进程gunicorn使用 Gunicorn 启动blog_project.wsgiWSGI 入口模块路径--log-file -日志输出到标准输出平台可捕获四、收集静态文件生产环境下Django 不自动提供静态文件服务需要用collectstatic收集到统一目录。bash(venv) $ python manage.py collectstatic这个命令会把 Admin 后台的静态文件、blog 应用的静态文件都复制到STATIC_ROOT目录staticfiles/。开发环境 vs 生产环境环境静态文件处理开发环境一般不需要运行collectstaticDjango 自动查找各 App 的static目录生产环境部署前必须运行确保所有静态文件集中到一个目录五、将项目推送到 GitHub1. 创建 .gitignore确保敏感文件和临时文件不被提交textvenv/ __pycache__/ *.pyc db.sqlite3 staticfiles/ .env各条目说明条目原因venv/虚拟环境体积大且可重建__pycache__/Python 字节码缓存*.pyc编译后的 Python 文件db.sqlite3开发数据库不应提交staticfiles/收集的静态文件部署时重新生成.env环境变量文件含敏感信息2. 推送到 GitHubbash$ git init $ git add . $ git commit -m 初始化 Django 博客项目 $ git branch -M main $ git remote add origin https://github.com/你的用户名/django-blog.git $ git push -u origin main六、Railway 部署Railway 是新兴的云部署平台对 Django 这类全栈应用支持良好。部署步骤访问 railway.app用 GitHub 账号登录。点击New Project→Deploy from GitHub repo→ 选择django-blog仓库。Railway 会自动检测Procfile识别启动命令。在Variables中设置环境变量。点击Deploy等待构建和部署完成。环境变量配置变量名值说明SECRET_KEY随机生成的长字符串Django 安全密钥DEBUGFalse关闭调试模式ALLOWED_HOSTS.railway.app允许 Railway 域名访问快速生成 SECRET_KEYbash$ python -c import secrets; print(secrets.token_urlsafe(50))部署成功后获得链接如https://django-blog.up.railway.app温馨提示Railway 免费额度有限每月 $5 或 500 小时。如果只是测试学习用完记得暂停项目。Heroku 已取消免费计划所以本教程推荐 Railway 作为替代。七、部署流程图八、常见部署问题排查问题现象可能原因解决方案部署后 500 错误DEBUGFalse且未配ALLOWED_HOSTS设置ALLOWED_HOSTS.railway.app静态文件 404未运行collectstatic或未配 Whitenoise检查中间件顺序确认已收集DisallowedHost域名不在ALLOWED_HOSTS添加 Railway 域名应用启动失败Procfile 路径错误确认blog_project.wsgi与实际项目名一致SECRET_KEY报错环境变量未设置在 Railway Variables 中添加数据库报错未执行迁移在部署命令中加入migrate构建超时依赖过多精简requirements.txt在 Procfile 中加入迁移命令textweb: python manage.py migrate --noinput gunicorn blog_project.wsgi --log-file -说明--noinput表示不提示确认适合自动化部署。九、下一步学习方向学习方向适合谁推荐起点Django REST Framework (DRF)需要为前端框架Vue3/React构建 API 后端学习 Serializer ViewSet将博客改造为 API 服务PostgreSQL需要生产级数据库替换 SQLite使用django-environ管理数据库配置Celery 异步任务需要后台任务发邮件、生成报表接入 Redis Celery实现异步任务队列Django Vue3/React 前后端分离想要前后端分离架构用 DRF 构建 API 后端Vue3/React 构建前端通过 fetch 通信十、小结本章你完成了博客项目的最后一步生产环境配置SECRET_KEY、DEBUG、ALLOWED_HOSTS通过环境变量管理。依赖管理pip freeze requirements.txt生成依赖清单。生产服务器Gunicorn Whitenoise 替代runserver。Procfile定义启动命令让平台识别如何运行应用。静态文件collectstatic收集到统一目录。GitHub 推送.gitignore排除敏感文件。Railway 部署关联仓库、配置环境变量、一键上线。至此你的 Django 博客已经从零到一完整上线。整个系列走完了从环境搭建、模型设计、视图模板、用户系统到生产部署的全流程。接下来你可以基于这个项目继续扩展评论、标签、RSS 订阅等功能或转向 DRF 构建 API 服务。
企业数字化 ERP 产品动态
相关推荐
hermes 安装 这篇文章主要讲解如何从源码安装hermes
请自行解决科学上网的问题
Linux / macOS / WSL2
这几种系统应该是一致的 如果懒得从源码就直接
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
这样安装吧 这是官网推荐的安装方式 hermes官网
wsl2
十分推… · 2026/9/25 19:35:54
GEOFlow Chrome运营助手使用指南:设备配对与最小权限Token半自动化发布 GEOFlow Chrome运营助手使用指南:设备配对与最小权限Token半自动化发布 【免费下载链接】GEOFlow Open-source GEO content engineering and multi-site distribution platform with AI quality inspection, illustrated admin help, hosted sites, browser-assiste… · 2026/9/25 20:06:36
Kali ToolKit 781 个 Kali 工具 2053 条命令,装进一个 20MB 的 exe:我开源了 Kali ToolKit
hello大家好,我是Malcode,一个专注于网安以及开发的人。
用 Kali 的人都懂一个痛点:工具实在太多了。
Kali 官方收录了七百多个工具&#… · 2026/9/25 20:06:17
MySQLTuner 文档同步工作流实战:doc-sync 脚本与版本一致性审计全解析 数据库运维 【免费下载链接】MySQLTuner-perl MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability. 项目地址: https://gitcode.com/gh_mirrors/my/My… · 2026/9/25 20:06:11
C++入门到精通:类和对象(上)全方位解析 前言
你是否曾好奇过,为什么 C 中 struct 和 class 都能定义类?它们之间到底有什么区别?类又是如何在内存中"活"起来的?如果你对这些问题感到困惑,那么这篇文章正是为你准备的。
本文将带你深入理解 C 的类和… · 2026/9/25 20:05:46
Lottery 抽奖系统实战:Docker 部署 XXL-JOB 分布式任务调度中心 文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、… · 2026/9/25 20:05:46
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37