gpt4 book ai didi

django - 摆脱 Django View 中的全局变量?

转载 作者:行者123 更新时间:2023-12-02 22:30:46 28 4
gpt4 key购买 nike

我创建了一个依赖全局变量的 Django 应用程序。它实际上是一种存储库对象,我的 view.py 中的所有函数都应该可以使用它。

正如将在代码中看到的那样,每个 View 函数都会修改 rp 全局变量。

View .py

def index(request):
global rp
rp = repo.Repo()
...
rp.function1()
rp.function2()
rp.attribute1 = value

return render_to_response('result_pick.html',{'result_list': rp.parsed_output_data, 'input_file_name': rp.input_file_name }, context_instance = RequestContext(request))

def result(request):
global rp
rp.function3()
local_atribute = rp.attribute1
....
return render_to_response('result_show.html' ,{'rp':rp}, context_instance = RequestContext(request))

浏览了一下后,我的印象是,当多个用户访问该网页时,这会失败,因为他们会共享全局 rp,这会导致问题。

摆脱全局变量但仍然能够在两个函数中访问 rp 的首选解决方案是什么?

最佳答案

使用 session框架;它在请求之间(因此在您的 View 方法之间)持久保存对象。

设置完成后,操作非常简单:

def a_method(request):
shared_obj = request.session.get('myobj',{}) # set dict as default
shared_obj['key'] = 'val'
request.session['myobj'] = shared_obj
# your normal code
return render(request,'sometemplate.html') # no need to pass 'shared_obj'

def b_method(request):
shared_obj = request.session.get('myobj',{})
if not shared_obj:
# session was terminated, so initialize this object
shared_obj['key'] = 'value'
else:
the_value = shared_obj['key']
# or, use the below to set a default value for 'key' if it doesn't exist
the_value = shared_obj.get('key','default')
# etc.

关于django - 摆脱 Django View 中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305023/

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