我需要一种方法来区分Django中的开发服务器(例如,由./manage.py runserver 0.0.0.0:8000
运行)与在Apache上运行的服务器。在Apache的情况下,我使用WSGI守护进程模式,但我想找到一些更可靠的解决方案来检测Django开发服务器上的执行。
我目前使用的类似于:
wsgi_wrapper = request.META.get('wsgi.file_wrapper')
wsgi_wrapper_path = wsgi_wrapper.__module__ if wsgi_wrapper else None
似乎给出wsgi_wrapper_path
存储:
wsgiref.util
”字符串在Django的内置开发服务器上运行时,None
在守护进程模式下运行Apache / WSGI时这里的问题是我不确定我是否可以依赖该检查(例如,生产/登台/开发服务器或我的localhost配置是否发生变化)。我无法找到任何有关该文件的文件。
我需要检查主要是因为Django的开发服务器存在一个问题:它将请求的CONTENT_TYPE
(request.META['CONTENT_TYPE']
)设置为“text/plain
”即使HTTP请求本身没有设置内容类型(例如,它是GET
请求。)
任何关于Django的开发服务器检测(或解决其上的错误请求内容类型的问题)的想法都将受到赞赏。感谢。
聚苯乙烯。我基本上问这个问题:How can I tell whether my Django application is running on development server or not?对于Django 1.4,试图确定在配置更改时足够可靠的解决方案。
答案 0 :(得分:2)
原则上 - 当使用Production和Dev服务器时,它们应该有不同的配置 - 最常见的是它们将使用不同的数据库,不同的邮件设置等。 因此,告诉服务器类型的最佳位置是配置。我可以指出两种最常用的方法:
然后在settings.py中添加:
server = config.get("SERVER_TYPE", "DEV")
并且只在PRODUCTION
的配置文件中包含SERVER_TYPE运行Web服务器时将SERVER_TYPE设置为环境变量。即对于Supervisord,运行网络服务器:
environment=SERVER_TYPE=PROD
或Apache:
SetEnv SERVER_TYPE PROD
通过这种方式,您可以确保只要不混合配置文件,无论您如何启动服务器,都将始终获得真实的服务器类型。 至少为什么配置文件用于。