5

我正在寻找一种在 django 生产服务器上为 INTERNAL_IPS 请求触发 DEBUG 的安全方法,而无需更改 settings.py 文件。主要是让一些设计人员使用工具栏检查实时数据/媒体上的问题,但不依赖他们在完成后重置设置。

类似于此方法。悬停这只适合部署。

http://nicksergeant.com/blog/django/automatically-setting-debug-your-django-app-based-server-hostname

过去在基于 php 的系统上,我有 mydomain.com 和一个演示 mydomaincom.myprodserver.com,其中 prodserver 域可以自动运行基于 $_SERVER['HOST_NAME'] 的调试代码,但 django 缺乏简单的超全局。例如,在博客示例中,主机名是 /etc/hostname 而不是 vhost。

任何想法表示赞赏。

编辑:

通过将 /path/to/django_in_debug/ 添加到 mydomaincom.myprodserver.com 虚拟主机条目的 sys.path 中,我有一种解决方法(但理想情况下我更喜欢更便携的解决方案)。然后在settings.py文件中

try:
    from django_in_debug.settings import *
except:
    DEBUG = False
4

1 回答 1

9

您要求做的事情比看起来要复杂一些。您想显示在​​ request-level发生的某些 INTERNAL_IPS 的调试信息。但是,您说的是站点级别的 settings.py 。

为了实现这一点,您必须根据每个请求重新评估 settings.py,正如您所知,这可能是一个非常糟糕的方向。根据 Django 自己的文档,在网站加载后修改网站的设置是不允许的(公平地说,人们会逃脱惩罚,但 Django 的官方立场毫无价值)。

这是给你的一个想法:

您有 2 个 WSGI 文件。第一个 WSGI 文件指向您的主 settings.py,apache 将来自 www.yourdomain.com 的流量定向到它。第二个 WSGI 文件指向 debug_settings.py,而 apache 将来自 debug.yourdomain.com 的流量重定向到它。debug_settinsg.py 看起来像这样:

from settings import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG

从这里您可以编写一个简单的中间件组件来捕获传入请求。将请求 IP 与 settings.INTERNAL_IPS 进行比较,如果找到匹配项,则将请求重定向到 debug.yourdomain.com。

这允许您保留站点的 1 个副本,但根据请求级别的值更改站点级别的设置。

于 2009-12-22T05:38:36.303 回答