我正在尝试实现一个 django 自定义中间件,该中间件让我可以访问request
我在项目中的任何位置的对象,基于此处建议的一个。那篇文章是很久以前写的,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
?请求终止时是否已清理?无论如何,已经发布了一个有效的答案。我会接受它,但任何其他(如果可能的话,更好的)解决方案都将受到欢迎!谢谢!