琐碎但重要的小知识: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)