2

Django の一部の構成設定を実行時に自動的に決定しようとしています。

最初のリクエストが行われる前に一度実行され、MiddlewareNotUsed を発生させることによってそれ自体を無効にするミドルウェア ハンドラをセットアップしました。ハンドラーが実行されると、HTTP 経由で別のサーバーから情報を取得します。その情報をすべてのビューで使用できるようにしたいと考えています。

設定モジュールには、空の文字列があります。取得した情報でこれを動的に変更できるので、すべてのビューで利用できるようになると思いました。しかし、ミドルウェア ハンドラーから文字列を更新すると、何らかの理由で情報が失われます。ビューには空の文字列のみが表示されます。

HTTP 経由で取得した情報をすべてのビューで利用できるようにするにはどうすればよいですか?

データベースやファイルシステムではなく、メモリに保持したいと思いますが、それが唯一の選択肢である場合は、これらのオプションのいずれかを使用します。

4

1 に答える 1

1

わかりました、私は一度似たようなことをしましたが、私はそれをあまり誇りに思っていません:)

しかし、それは非常に単純で、仕事をしたので、ここにあります:

from django.conf import settings

class SomeMiddleware(object):
    def process_request(self, request):
        try:
            settings.SOME_STRING_CONFIG
        except AttributeError:
            settings.SOME_STRING_CONFIG = some_value_to_set

ただし、これは django.settings を処理する良い方法ではありません。 https://docs.djangoproject.com/en/dev/topics/settings/#altering-settings-at-runtimeを参照してください。

いいえ、ここに引用させてください。

実行時の設定の変更 実行時にアプリケーションの設定を変更しない
で ください。たとえば、ビューでこれを 行わないでください。

from django.conf import settings
settings.DEBUG = True #やらないでください!

設定に割り当てる必要がある唯一の場所は、設定ファイル内です。

(太字は私が追加しました)

于 2012-04-28T13:49:36.520 に答える