Django 中 DEBUG = True 和 False 之间的功能区别是啥?

Posted

技术标签:

【中文标题】Django 中 DEBUG = True 和 False 之间的功能区别是啥?【英文标题】:What are functional differences between DEBUG = True and False in Django?Django 中 DEBUG = True 和 False 之间的功能区别是什么? 【发布时间】:2014-10-29 20:25:18 【问题描述】:

在 Django 应用的 settings.py 文件中切换 DEBUG 设置之间的功能差异究竟是什么?

我最初认为DEBUG=True 只是打开了 Django 的日志记录功能和用于错误报告的中间件,但现在I realize that was naive of me。 了解 Django 内部系统在两种布尔设置下的不同工作方式有助于在处理难以调试的普通状态 500 错误时形成假设

【问题讨论】:

功能上没有区别。但是,DEBUG 定义了是否应在浏览器级别向用户显示错误消息(DEBUG=True)v/s 向管理员发送电子邮件(DEBUG=False,某些设置。) 关于代码使用DEBUG=True(例如:***.com/questions/15128135/…)的几十个SO帖子怎么样?当DEBUG=True 时似乎发生了更多事情,否则该设置不会破坏代码的工作 - 只是以不同的方式报告错误。 【参考方案1】:

DEBUG=True 的主要优点之一是详细的错误页面。 Django 提供了错误的详细堆栈跟踪。这对调试非常有帮助。基本上,在 DEBUG 模式下,django 会记住它执行的每个 SQL 查询(这再次使它完全不适合生产)。

此外,如果 DEBUG=True,则禁用主机验证。换言之,如果 DEBUG=False,则需要设置 ALLOWED_HOSTS。

【讨论】:

谢谢,这绝对是相关的,但我知道肯定还有更多事情要做,因为即使使用ALLOWED_HOSTS=['*'],我也会看到这 500 个错误。我认为DEBUG=True 也会自动更正代码的某些方面(但这只是我的猜测,这就是我问这个问题的原因)【参考方案2】:

从 Django 1.6.2 it has been identified before 开始,导入错误不一定在 DEBUG=True 中捕获,但肯定在 DEBUG=False

简单示例:尝试将您应用的settings.py (import yourapp.settings) 导入您的一个视图,然后尝试引用一个不存在的变量:settings.var_that_does_not_exist。对于引用该不存在变量的任何视图,这只会是DEBUG=False 时的问题(导致状态 500 错误)。

【讨论】:

【参考方案3】:

    DEBUG=True,如果有错误,页面会显示错误详情。

    如果DEBUG=Falsesettings.pyALLOWED_HOSTS 可以工作,请谨慎设置。

    mediastatic 不会为DEBUG=False 提供访问权限,您必须在网络服务器的帮助下为它们提供访问权限,例如nginxApache

【讨论】:

以上是关于Django 中 DEBUG = True 和 False 之间的功能区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Debug = False 中不存在的 url 的 Django 500 错误

Django 1.11 404 页面,而 Debug=True

当 debug=False 时可能导致 Django 错误,而当 debug=True 时不存在

如何在 django 模板中检查 DEBUG true/false - 完全在 layout.html [重复]

如果 DEBUG 为 True,也启用 Django 日志记录

每当 django 中的 debug=False 时,Heroku 都会给出服务器错误(500),而当 debug=True 时没有错误