Imr*_*ran 51 python django wsgi
我怎样才能确定我的应用程序是否在开发服务器上运行?我想,我可以检查的价值settings.DEBUG
,并假设如果DEBUG
是True
那么它的开发服务器上运行,但我更愿意知道肯定不是依靠惯例.
Ary*_*rog 39
我在settings.py中添加以下内容以区分标准开发服务器和生产:
import sys
RUNNING_DEVSERVER = (len(sys.argv) > 1 and sys.argv[1] == 'runserver')
Run Code Online (Sandbox Code Playgroud)
然而,这也依赖于惯例.
(根据Daniel Magnusson的评论修改)
ine*_*rte 20
server = request.META.get('wsgi.file_wrapper', None)
if server is not None and server.__module__ == 'django.core.servers.basehttp':
print('inside dev')
Run Code Online (Sandbox Code Playgroud)
当然,wsgi.file_wrapper
可能是在META上设置的,并且django.core.servers.basehttp
在另一个服务器环境中有一个来自极端巧合命名的模块的类,但是我希望这将覆盖你.
顺便说一句,我发现这是通过在开发服务器上运行时创建一个无效的模板,Traceback
并在Request information
部分和部分上搜索有趣的东西,所以我只是编辑我的答案来证实Nate的想法.
Sov*_*iut 14
通常我设置一个名为的变量environment
并将其设置为"DEVELOPMENT","STAGING"或"PRODUCTION".在设置文件中,我可以添加基本逻辑,以根据环境更改正在使用的设置.
编辑:此外,您可以简单地使用此逻辑来包含settings.py
覆盖基本设置的不同文件.例如:
if environment == "DEBUG":
from debugsettings import *
Run Code Online (Sandbox Code Playgroud)
通常这有效:
import sys
if 'runserver' in sys.argv:
# you use runserver
Run Code Online (Sandbox Code Playgroud)
依赖settings.DEBUG是AFAICS最优雅的方式,因为它偶尔也会在Django代码库中使用.
我想你真正想要的是一种自动设置该标志的方法,而无需在每次将项目上传到生产服务器时手动更新它.
为此,我检查settings.py的路径(在settings.py中)以确定项目运行的服务器:
if __file__ == "path to settings.py in my development machine":
DEBUG = True
elif __file__ in [paths of production servers]:
DEBUG = False
else:
raise WhereTheHellIsThisServedException()
Run Code Online (Sandbox Code Playgroud)
请注意,您可能也更喜欢使用@Soviut建议的环境变量进行检查.但是,正如在Windows上开发并在Linux上进行服务检查文件路径的人要比使用环境变量更容易.
归档时间: |
|
查看次数: |
19583 次 |
最近记录: |