我需要一种方法来区分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 上运行时,
这里的问题是我不确定我是否可以依赖该检查(例如,如果生产/暂存/开发服务器或我的本地主机配置发生变化)。我找不到任何有关此的文档。
我需要这个检查主要是因为Django开发服务器的一个问题:它将请求的CONTENT_TYPE
(request.META['CONTENT_TYPE']
)设置为"text/plain
",即使HTTP请求本身没有设置内容类型(例如。这是一个GET
请求)。
任何关于 Django 开发服务器检测(或解决其上请求内容类型不正确的问题)的想法将不胜感激。谢谢。
附言。我基本上是在问这个问题:我如何判断我的 Django 应用程序是否在开发服务器上运行?对于 Django 1.4,尝试确定在配置更改的情况下足够可靠的解决方案。
使用生产和开发服务器时,它们应该具有不同的配置 - 最常见的是它们将使用不同的数据库、不同的邮件设置等。因此,判断服务器类型的最佳位置是配置。我可以指出两种最常用的方法:
- 配置文件
然后在 settings.py 只需添加:
server = config.get("SERVER_TYPE", "DEV")
并且仅在生产环境的配置文件中SERVER_TYPE
- 环境
在运行 Web 服务器时将SERVER_TYPE设置为环境变量。 即对于主管,运行网络服务器:
environment=SERVER_TYPE=PROD
或对于阿帕奇:
SetEnv SERVER_TYPE PROD
这样,您就可以确保,只要您不混合配置文件,无论您如何启动服务器,您都将始终获得真正的服务器类型。至少这就是为什么使用配置文件的原因。