Django - 区分开发服务器(manage.py 运行服务器)和常规服务器(例如.阿帕奇)



我需要一种方法来区分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_TYPErequest.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

这样,您就可以确保,只要您不混合配置文件,无论您如何启动服务器,您都将始终获得真正的服务器类型。至少这就是为什么使用配置文件的原因。

最新更新