ここで提案されているものrequest
に基づいて、プロジェクト内のどこにいてもオブジェクトにアクセスできるようにするdjangoカスタムミドルウェアを実装しようとしています。この記事はかなり前に書かれたもので、django 1.5には当時のライブラリがありません。リクエスト オブジェクトを格納するためのスレッド セーフなローカル ストアを実現するには、どの代替手段を使用すればよいですか? これは、カスタム ミドルウェアのコードです。thread_support
from django.utils.thread_support import currentThread
_requests = {}
def get_request():
return _requests[currentThread()]
class GlobalRequestMiddleware(object):
def process_request(self, request):
_requests[currentThread()] = request
そしてもちろん、例外が発生します。
ImproperlyConfigured: Error importing middleware myProject.middleware.global:
"No module named thread_support"
編集:
私は実用的な修正を見つけました:
from threading import local
_active = local()
def get_request():
return _active.request
class GlobalRequestMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
_active.request = request
return None
ここで質問があります。メモリ リークにつながるのでしょうか。はどうなり_active
ますか?リクエストが終了したときにクリーンアップされますか? とにかく、有効な回答が既に投稿されています。私はそれを受け入れるつもりですが、他の(可能であればより良い)解決策は大歓迎です!ありがとう!