作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找一种方法,让我的 django 请求中的任何模块都可以访问全局变量,而不必将其作为参数传递。传统上,在其他 MVC 中,我会将其存储在请求上下文或 session 中,并使用类似“get_current_context”方法(我在 Django 中找不到)之类的方法访问上下文。
有没有类似的东西,或者其他一些机制可以让我在请求上下文中的任何地方都有一个可用的值?
TIA!
更新:我的研究只提出了一个可行的解决方案 - 线程本地(有些人认为它不可行,但对此有相当积极的讨论,有利有弊,而且似乎大多数人认为你应该能够在 Django 中使用它,如果你负责任的话)。
最佳答案
我仍然不完全清楚您要实现的目标,但听起来您可能想要类似以下内容。
如果你创建一个中间件,比如说......
myproject/myapp/middleware/globalrequestmiddleware.py
...看起来像这样...
import thread
class GlobalRequestMiddleware(object):
_threadmap = {}
@classmethod
def get_current_request(cls):
return cls._threadmap[thread.get_ident()]
def process_request(self, request):
self._threadmap[thread.get_ident()] = request
def process_exception(self, request, exception):
try:
del self._threadmap[thread.get_ident()]
except KeyError:
pass
def process_response(self, request, response):
try:
del self._threadmap[thread.get_ident()]
except KeyError:
pass
return response
...然后将其添加到您的 settings.py
MIDDLEWARE_CLASSES
中作为列表中的第一项...
MIDDLEWARE_CLASSES = (
'myproject.myapp.middleware.globalrequestmiddleware.GlobalRequestMiddleware',
# ...
)
...然后您就可以像这样在请求/响应过程中的任何地方使用它...
from myproject.myapp.middleware.globalrequestmiddleware import GlobalRequestMiddleware
# Get the current request object for this thread
request = GlobalRequestMiddleware.get_current_request()
# Access some of its attributes
print 'The current value of session variable "foo" is "%s"' % request.SESSION['foo']
print 'The current user is "%s"' % request.user.username
# Add something to it, which we can use later on
request.some_new_attr = 'some_new_value'
...或者任何您想做的事情。
关于python - 有没有办法从 Django 的任何地方访问上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16633952/
我是一名优秀的程序员,十分优秀!