Python 德扬戈。生产调试

Python 德扬戈。生产调试,python,django,django-deployment,Python,Django,Django Deployment,我正在Django编写我的第一个真实项目,在开发和生产中正确设置DEBUG有问题。在我的settings.py项目文件中,我有: # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.environ.get('DJANGO_DEBUG', 'True') == 'True' 因此,我希望它的工作原理如下。默认情况下,DEBUG设置为True(我在开发中使用此选项)。但是在我的生产服务器上,我有一

我正在Django编写我的第一个真实项目,在开发和生产中正确设置
DEBUG
有问题。在我的
settings.py
项目文件中,我有:

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.environ.get('DJANGO_DEBUG', 'True') == 'True'
因此,我希望它的工作原理如下。默认情况下,
DEBUG
设置为
True
(我在开发中使用此选项)。但是在我的生产服务器上,我有一个环境变量
DJANGO\u DEBUG
设置为
“False”
,因此DJANGO应该将
DEBUG
设置为
False

但这是行不通的!当我进入
my_网站/notexistingurl
时,我会看到Django详细信息错误页面,上面说我在
settings.py
文件中将
DEBUG
设置为
True
。为了让我完全不明白这一点,当我在服务器上打开python shell时,它会说
os.environ.get('DJANGO_DEBUG','True')='True'
False


有人知道我错过了什么吗?因为在我看来,这是两件完全矛盾的事情

这更像是猜测,但通常Django服务器不会在与“管理员”相同的用户下运行。事实上,作为一种额外的安全措施,这些进程通常在具有有限权限的单独用户下运行

其目的是防止用户以某种方式在Django应用程序中注入代码以获得更多控制。事实上,假设一名黑客找到了一种方法,通过Django服务器评估任意Python代码,那么该黑客最终可以控制所有运行Django应用程序的用户拥有的控制权,如文件、设备、互联网连接等,以限制这一点,Django应用程序运行时,用户通常拥有运行Django应用程序所需的权限,但权限(不多)。虽然可能仍有漏洞需要利用,但这至少会使其更加困难和耗时

因此,这意味着设置Django应用程序的用户的环境不是运行Django应用程序的用户,因此可能没有为该用户设置环境变量。没有通用的方法来解决这个问题,因为这可能取决于您的主机提供商,但是(非常)可能有方法为django应用程序用户设置环境变量

但是,最好是“反转”设置:现在默认情况下在调试模式下运行,只有在显式设置时才在生产中运行。这样做的风险更大,因为在设置环境变量或部署应用程序时可能会出错。当Django应用程序在调试模式下运行时,它会显示源代码的片段,人们或许可以操纵服务于静态/媒体文件的视图来服务于更敏感的文件。默认情况下,最好在生产模式下运行,并且只有在明确说明的情况下才在调试模式下运行。例如:

DEBUG = os.environ.get('DJANGO_DEBUG', 'False') == 'True'

DEBUG=os.environ.get('DJANGO_DEBUG','False')=='True'
您是否有机会使用WSGI设置变量?服务器通常与不同的用户一起运行,这是为了避免接管Web服务器的人访问您的所有文件。因此,这并不是因为您为您的用户设置了一个路径,而是为Web服务器用户设置了一个路径。也就是说,最好以相反的方式实现它,所以
DEBUG=os.environ.get('DJANGO_DEBUG','False')=='True'
,这样,当显式设置时,您可以在调试模式下运行,现在,当显式设置时,您只能在生产环境中运行,但这更危险。谢谢你@willemvanonsen。我想我现在知道该怎么办了。