琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS
        【摘要】  琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS这些配置“看着小”,一踩坑就半天——背下来能救命。 一、BASE_DIR:项目的“根坐标”是什么BASE_DIR 就是项目的绝对路径,Django 用它拼接所有相对路径(模板、静态文件、数据库文件等)。在哪定义settings.py 第一行:BASE_DIR = Path(__file__).resolve()...
    
    
    
    琐碎但重要的小知识:BASE_DIR、DEBUG 与 ALLOWED_HOSTS
这些配置“看着小”,一踩坑就半天——背下来能救命。
一、BASE_DIR:项目的“根坐标”
- 
是什么 
 BASE_DIR就是项目的绝对路径,Django 用它拼接所有相对路径(模板、静态文件、数据库文件等)。
- 
在哪定义 
 settings.py第一行:
BASE_DIR = Path(__file__).resolve().parent.parent
- 
__file__当前settings.py路径
- 
.parent.parent再往上两层 → 外层book_manager/目录。
- 打印验证
print(BASE_DIR)
# 输出示例:/home/ubuntu/projects/book_manager
- 常见用法
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:线上“门禁”
- 
作用 
 当DEBUG=False时,Django 只响应列表中的域名或 IP,防止 HTTP Host 头攻击。
- 
开发期偷懒写法 
ALLOWED_HOSTS = ['*']   # 允许任何 IP(仅限开发)
- 生产期正确写法
ALLOWED_HOSTS = ['www.example.com', '127.0.0.1', '192.168.1.100']
- 报错示例
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)