【发布时间】:2021-04-06 05:19:00
【问题描述】:
我的一个基于 Django 的项目中有两个函数,位于 views.py 文件下。第一个函数生成一个视图页面,第二个函数只是根据 jQuery 请求返回一些响应。它们的外观如下:
第一个呈现显示页面的函数:
@login_required()
def watchlist_details(request, iid):
... ... ...
... ... ...
contracts = dict(enumerate(x.rstrip() for x in symbols))
automate = Automate()
automate.init_symbol(contracts)
automate.live_stream()
... ... ...
... ... ...
return render(request, 'watchlist_show.html')
将在 jQuery 调用上返回一些响应的第二个函数:
def streaming_response(request):
automate = Automate() # need to replace this with: automate = automate_of_first_function
result = automate.get_stream_result()
json_result = json.dumps(result)
return json_result
这里的问题在于第二个函数,我重新初始化了automate,它没有任何内容来生成响应。所以,我需要访问在watchlist_details函数中初始化的方法automate实例。
由于我在 Django 应用程序中遵循基于函数的视图而不是基于类的视图,因此无法创建全局/公共变量。而且我认为 Django 不允许在基于类的视图中创建多个方法(这对我来说也是一个令人困惑的概念)。
所以我的问题是,是否可以从第二个函数访问 automate 实例(在第一个函数中初始化)?如果是,那么我该如何访问它?
谢谢
【问题讨论】:
-
你需要从根本上明白,每个HTTP请求都是独立的、无状态的。这与函数或类无关,而是第二个请求与之前的任何请求无关,服务器不记得任何内容。始终考虑多个用户可能同时使用您的服务器,和/或您可能同时运行两台或多台服务器,并且哪个服务器服务于请求是随机的。您只有请求本身包含的信息,并且需要从中获取所有必要的信息。