【发布时间】:2012-06-13 07:56:33
【问题描述】:
我需要一种方法来将 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 的开发服务器存在一个问题:即使 HTTP 请求本身没有内容,它也会将请求的 CONTENT_TYPE (request.META['CONTENT_TYPE']) 设置为“text/plain”类型集(例如,它是一个GET 请求)。
任何关于 Django 的开发服务器检测(或解决请求内容类型不正确的问题)的想法都将不胜感激。谢谢。
附言。我基本上是在问这个问题:How can I tell whether my Django application is running on development server or not? for Django 1.4,试图确定在配置更改时足够可靠的解决方案。
【问题讨论】:
-
@YujiTomita:我的研究表明,结果与该问题的公认答案不同。另外,我已经更新了我的答案以包含该问题的链接。您链接的问题的公认答案不能解决问题(与我的结果略有不同),我需要该答案的更新版本、指向正确文档的一些链接或我可以使用的其他解决方案并让我高枕无忧。
-
好吧,
'runserver' in sys.argv怎么样?然后在设置中设置一个标志?运行服务器 = 真。由于它仅用于开发,因此我个人会对此感到满意。 -
@YujiTomita:我没有考虑过,但是由于没有其他建议,我会考虑一下。问题在于,开发服务器不仅可以由
./manage.py runserver或python manage.py runserver运行,它还可能由其他东西执行(我正在使用 Fabric 执行各种任务,这样的场景是可能的)。我会对更清洁、更可靠的解决方案感到非常满意。但现在我怀疑是否有任何问题。 -
你是什么意思 - 面料会有什么不同?如果有的话,它不会只是调用 manage.py runserver 吗?
-
@YujiTomita:我可能对此不够清楚。我的意思是你可以不通过调用
./manage.py runserver来运行开发服务器,而是执行./manage.py runserver命令所做的事情(可能以修改的方式)。换句话说:1)在sys.argv中有runserver并不一定意味着您正在运行Django 的内部开发服务器,2)运行Django 的内部开发服务器并不一定会导致在sys.argv中有runserver。我需要更可靠的东西。 (可选)我可以做各种事情,但是有什么方法可以区分开发服务器吗?
标签: django apache wsgi django-manage.py django-dev-server