我已经创建了一个依赖于全局变量的Django应用程序。它实际上是一种存储库对象,应该对我的view.py中的所有函数都可用。
在代码中可以看到,每个视图函数都会修改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,首选的解决方案是什么?
发布于 2012-09-07 01:09:18
使用session框架;它在请求之间持久化对象(因此在视图方法之间持久化)。
一旦你建立了它,它就像下面这样简单:
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.https://stackoverflow.com/questions/12305023
复制相似问题