Django中DEBUG=True和False的功能差异是什么?
在Django应用的settings.py文件中,切换DEBUG
设置到底有什么具体的功能差异呢?
我最开始以为DEBUG=True
只是开启了Django的日志记录功能和错误报告的中间件,但现在我意识到这想法太简单了。了解Django内部系统在这两个设置下是如何不同工作的,有助于我们在处理难以调试的500状态错误时形成一些假设。
3 个回答
在Django 1.6.2版本中,之前有发现过一个问题,就是在DEBUG=True
的情况下,导入错误不一定会被捕捉到,但在DEBUG=False
时肯定会被捕捉到。
举个简单的例子:试着在你的应用的视图中导入settings.py
(也就是import yourapp.settings
),然后引用一个不存在的变量,比如settings.var_that_does_not_exist
。这个问题只会在DEBUG=False
时出现,导致500错误,尤其是那些引用了这个不存在变量的视图。
当你把
DEBUG=True
设置为真时,如果出现错误,页面会显示错误的详细信息。如果把
DEBUG=False
设置为假,那么settings.py
文件里的ALLOWED_HOSTS
就会生效,你需要小心设置这个选项。在
DEBUG=False
的情况下,media
和static
文件是无法直接访问的,你需要通过像Nginx
或Apache
这样的网络服务器来提供这些文件。
DEBUG=True的一个主要好处是可以看到详细的错误页面。Django会提供出错时的详细信息,这对调试非常有帮助。简单来说,在DEBUG模式下,Django会记录它执行的每一个SQL查询(这也是为什么这个模式完全不适合用在生产环境中)。
另外,如果DEBUG=True,主机验证会被禁用。换句话说,如果DEBUG=False,就需要设置ALLOWED_HOSTS。