我今天注意到一个奇怪的行为:在下面的例子中,似乎config.CLIENT变量在请求中保持持久性 - 即使视图传递的是完全不同的client_key,获取客户端的查询也只执行一次(每个请求),然后config.CLIENT变量保持分配.
它似乎不是数据库缓存问题.
它发生在mod_python以及测试服务器上(当重新启动测试服务器时重新分配变量).
我在这里错过了什么?
#views.py
from my_app import config
def get_client(client_key=None):
if config.CLIENT == None:
config.CLIENT = get_object_or_404(Client, key__exact=client_key, is_active__exact=True)
return config.CLIENT
def some_view(request, client_key):
client = get_client(client_key)
...
return some_response
# config.py
CLIENT = None
Run Code Online (Sandbox Code Playgroud)
多个请求由同一个进程处理,像CLIENT这样的全局变量可以像流程那样生存.在处理请求时,您不应该依赖全局变量 - 当您需要在构建响应时保留变量或将数据放入数据库时,当需要在多个请求中保留某些内容时,请使用本地变量.
如果您需要通过请求保留一些值,您可以将其添加到线程本地(这里应该是一些示例,将用户信息添加到本地)或者只是将其作为变量传递给其他函数.
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |