gpt4 book ai didi

python - 设置全局常量跨越所有 View

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:05 25 4
gpt4 key购买 nike

这听起来很讨厌。我想在请求中设置一个全局变量,这意味着我的所有 View 都可以通过以下方式引用该常量:

getattr(request, 'CONSTANT_NAME', None)

但是,这个变量的值可能会在某个时候改变,这意味着我的一个 View 中有以下代码:

setattr(request, 'CONSTANT_NAME', VALUE)

我知道我这样做的方式肯定是错误的,但我想知道是否有一种正确和干净的方式来实现我正在寻找的东西。

我正在考虑中间件,但不确定如何去做。一个提示就足够了。

提前致谢。

更新:有人提到了 Session。我很确定它应该有效。但是,它不够干净。通过使用 session ,我需要创建与服务器维护的 session 总数一样多的相同常量。事实上,常量在服务器之间保持不变,而且它必须是可变的!最后一个要求是最讨厌的部分。

最佳答案

最终还是走上了中间件的路子。我写了一个自定义中间件并在中间件中设置了一个变量,比如,

CONSTANT_NAME = None

它是全局性的。和一个本地线程:

_thread_local = threading.local()

这也是全局性的。

然后我在中间件中有两个方法,

def get_constant_value()
return getattr(_thread_local, 'CONSTANT_NAME', None)

def set_constant_value(value):
CONSTANT_NAME = value

可以从任何 View 调用。

然后在我的中间件中,我有

def process_request(self, request):
_thread_local.CONSTANT_NAME = CONSTANT_NAME

此时,我调用 set 并从我想要的任何 View 中获取这个跨服务器变量。

解决方案并不完美(我相信)。如果有人有更好的主意,请告诉我!

谢谢!

关于python - 设置全局常量跨越所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25537262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com