琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS

举报
周杰伦本人 发表于 2025/07/30 14:13:52 2025/07/30
【摘要】 琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS这些配置“看着小”,一踩坑就半天——背下来能救命。 一、BASE_DIR:项目的“根坐标”是什么BASE_DIR 就是项目的绝对路径,Django 用它拼接所有相对路径(模板、静态文件、数据库文件等)。在哪定义settings.py 第一行:BASE_DIR = Path(__file__).resolve()...

琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS

这些配置“看着小”,一踩坑就半天——背下来能救命。


一、BASE_DIR:项目的“根坐标”

  1. 是什么
    BASE_DIR 就是项目的绝对路径,Django 用它拼接所有相对路径(模板、静态文件、数据库文件等)。

  2. 在哪定义
    settings.py 第一行:

BASE_DIR = Path(__file__).resolve().parent.parent
  • __file__ 当前 settings.py 路径

  • .parent.parent 再往上两层 → 外层 book_manager/ 目录。

  1. 打印验证
print(BASE_DIR)
# 输出示例:/home/ubuntu/projects/book_manager
  1. 常见用法
TEMPLATES = [{
  'DIRS': [BASE_DIR / 'templates'],   # 拼接模板目录
}]
DATABASES = {
  'default': {
      'NAME': BASE_DIR / 'db.sqlite3',  # 拼接数据库文件
  }
}

二、DEBUG:开发神器 vs 生产炸弹

模式 作用/风险
开发 DEBUG = True • 显示详细错误堆栈

• 自动重载代码
• 404/500 页面带调试信息|
|生产|DEBUG = False|• 关闭调试信息,防止泄露敏感数据
• 必须使用 ALLOWED_HOSTS|

切换演示:

DEBUG = True   # 开发
DEBUG = False  # 上线前必须改

三、ALLOWED_HOSTS:线上“门禁”

  1. 作用
    DEBUG=False 时,Django 只响应列表中的域名或 IP,防止 HTTP Host 头攻击。

  2. 开发期偷懒写法

ALLOWED_HOSTS = ['*']   # 允许任何 IP(仅限开发)
  1. 生产期正确写法
ALLOWED_HOSTS = ['www.example.com', '127.0.0.1', '192.168.1.100']
  1. 报错示例
DisallowedHost at /
Invalid HTTP_HOST header: '192.168.1.100'. You may need to add '192.168.1.100' to ALLOWED_HOSTS.

四、一分钟速记

配置 开发 生产
BASE_DIR 自动计算,不动它 不动它
DEBUG True 必改 False
ALLOWED_HOSTS ['*'][] 明确域名/IP

五、彩蛋:故意除以 0 看 DEBUG 页面
在视图里写:

def test(request):
    return HttpResponse(100 / 0)  # 打开浏览器即可看到堆栈

DEBUG=False 再刷新 → 只显示 “Server Error (500)”


这三个特性都是在settings.py文件中定义的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。