5

settings.py ファイルを変更せずに、django 運用サーバーで INTERNAL_IPS リクエストの DEBUG をトリガーする安全な方法を探しています。主に、一部のデザイナーがライブ データ/メディアの問題をチェックできるようにツールバーを表示するためですが、終了後に設定をリセットする必要はありません。

この方法に似ています。ただし、これは展開にのみ適しています。

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 です。

どんなアイデアでも大歓迎です。

編集:

/path/to/django_in_debug/ を mydomaincom.myprodserver.com vhost エントリの 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 からのトラフィックをそこに転送します。debug_settingsg.py は次のようになります。

from settings import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ここから、単純なミドルウェア コンポーネントを記述して、着信要求をトラップします。リクエスト IP が settings.INTERNAL_IPS と比較され、一致が見つかった場合、リクエストは debug.yourdomain.com にリダイレクトされます。

これにより、サイトの 1 つのコピーを保持しながら、リクエスト レベルの値に基づいてサイト レベルの設定を変更できます。

于 2009-12-22T05:38:36.303 に答える